|
I've just read this:
Please note that message filters can only be applied to STA-Threads and only one filter can be applied to each thread. Multithreaded apartments, for example console applications, cannot have message filters. These applications need to run in a STA-Thread to apply a message filter.
Now it seems the next step is to learn how to make a console application to run in a STA-Thread... well first I should know what is a STA-Thread...
Thank you for your answer Richard, I'll read about that GetLastError function. I guess it works like the one in C/C++ so it should be easy to get extra information.
But... reading the second link... it seems they are using a console application... let's see if I can get something there...
Thank you very much for the links!
|
|
|
|
|
Joan M wrote: Now it seems the next step is to learn how to make a console application to run in a STA-Thread.
It should be as simple as adding the [STAThread] attribute to your Main method:
using System;
static class Program
{
[STAThread]
static void Main()
{
...
}
}
STAThreadAttribute[^]
Understanding and Using COM Threading Models[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
It was that...
Writing that [STAThread] on top of main made it work...
Still have to read about it to understand what happens under the hood but...
Thank you very much!
|
|
|
|
|
I have yet to take the time to learn EF, but I do have a few questions:
1). How does EF know if the data on an entity has been changed, and if so, in what way? For example, if I create a new instance of an entity, populate it, then send it to the repo, how does the repo know to do an insert instead of an up date?
2) When I query something and get back an entity, then change something on the entity, how does EF know what has changed? Does the entity contain old/new values somehow?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
There is a definite line of distinction between your operational entity and your persistent one; I think that's the piece missing in your puzzle.
Nothing is done automatically. If you want to do an upsert you generally need to code that, otherwise you're performing inserts or updates. If you want to modify a persistent entity with values on one that you've been working with, you need to pass it as an update.
Using an ORM like EF doesn't mitigate the need to have decision points about how you manipulate and update data, it just un-tethers the need to have SQL in the mix.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
Not sure if that answered my questions. I'm just trying to understand the mechanics of what EF is doing.
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Fair, enough, dialing it back:
1) It doesn't. You need to determine whether an insert or an update is appropriate.
2) It doesn't. You need to commit any updates.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
 Depending on the Version of EF you have different "Mechanisms" but they all basically boil down to
Simple Poco Classes for each data type returned(table or stored procedure), and references to any linked tables.
Then there is the map file which defines the parameters and settings for each object (which columns are required, field sizes, single or many...
To be perfectly honest its my experience that EF is a cool toy for pulling reports or nested data (Pull a Customer and have all his orders in a single call)
HOWEVER if performance is in any way a consideration for the application Avoid EF like the plague.
I personally prefer to use parameterized stored procedure ADO DB calls, then inside my POCO classes I will add two methods called FromADO one takes a DataRow and the Other Takes a DataTable
public static List<Deposit> FromADO(DataTable objectsToConvert)
{
return (from DataRow objectToConvert in objectsToConvert.Rows select FromADO(objectToConvert)).ToList();
}
public static Deposit FromADO(DataRow objectToConvert)
{
var returned = new Deposit();
if (objectToConvert.Table.Columns["ID"] != null && !string.IsNullOrEmpty(objectToConvert["ID"].ToString()))
returned.ID = int.Parse(objectToConvert["ID"].ToString());
if (objectToConvert.Table.Columns["DateTime"] != null && !string.IsNullOrEmpty(objectToConvert["DateTime"].ToString()))
returned.DateTime = System.DateTime.Parse(objectToConvert["DateTime"].ToString());
if (objectToConvert.Table.Columns["Description"] != null && !string.IsNullOrEmpty(objectToConvert["Description"].ToString()))
returned.Description = objectToConvert["Description"].ToString();
if (objectToConvert.Table.Columns["Total"] != null && !string.IsNullOrEmpty(objectToConvert["Total"].ToString()))
returned.Total = double.Parse(objectToConvert["Total"].ToString());
return returned;
}
What this accomplishes is any call that needs a Deposit you pass the DataTable or DataRow and you get a list or a single Deposit back.
Similarly your ORM class call becomes simple and easy to maintain
public Deposit GetDepositById(int id)
{
var parms = new List<SqlParameter>
{
new SqlParameter {DbType = DbType.Int16, Value = id, Direction = ParameterDirection.Input, ParameterName = "@ID", SqlDbType = SqlDbType.Int}
};
var returned = ADOHelper.ReturnDataTable(conn, "sp_DepositGetById", parms, CommandType.StoredProcedure);
return Deposit.FromADO(returned).FirstOrDefault();
}
And for a call the returns more than one deposit
public List<Deposit> GetDepositsByDateRange(DateTime begindate, DateTime enddate)
{
var parms = new List<SqlParameter>
{
new SqlParameter {DbType = DbType.DateTime, Value = begindate, Direction = ParameterDirection.Input, ParameterName = "@BeginDate", SqlDbType = SqlDbType.DateTime},
new SqlParameter {DbType = DbType.DateTime, Value = enddate, Direction = ParameterDirection.Input, ParameterName = "@EndDate", SqlDbType = SqlDbType.DateTime}
};
var returned = ADOHelper.ReturnDataTable(conn, "sp_DepositsGetByDateRange", parms, CommandType.StoredProcedure);
return Deposit.FromADO(returned);
}
While not Sexy, flashy or new its fast stable and simple to maintain.. my two cents
|
|
|
|
|
C. David Johnson wrote: To be perfectly honest its my experience that EF is a cool toy for pulling reports or nested data (Pull a Customer and have all his orders in a single call)
HOWEVER if performance is in any way a consideration for the application Avoid EF like the plague.
I can definitely understand where you're coming from; the biggest issue that most people have with EF is some of the completely insane and inefficient queries that it can generate when handling complex relationships.
The main problem presented by Kevin, though, is the concurrency issue. EF builds a local in-memory model of the data that it tracks so that updates can be batched back to the database, and this can cause some pretty contentious concurrency issues if not understood and handled correctly. This, in my opinion, is the biggest issue with the framework.
I prefer abstracting my DAL, which has led me to take a closer look at object stores and in-memory databases for high-performance applications, and a lot of custom interface work that allows me to inject a SQL provider if appropriate. This has definitely led me on a path away from ADO, though.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
As has been pointed out, all the magic happens when you "SaveChanges".
Prior to that, EF is capturing your "intentions" via add, updates and deletes to the "in-memory" data model; which involves entity keys, hash codes and "attached / detached" entities.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Hi,
I generate programmatically an excel file and I want to save it in a shared directory in the network but there is an error on the line like this xls.saveas("\\\\myserver\\shareddirectory\\myfile.xlsx");
Do you have any idea ?
Thanks !
|
|
|
|
|
Member 13421843 wrote: Do you have any idea ? No, because you have not told us what the error is.
|
|
|
|
|
Yes. Save it to a local location and copy it after it is saved. That way you'll know if there's a problem with saving or with network-access, and you'll have the added benefit that someone can sneakernet the file to where it is needed regardless of the network.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Is it "like this" or "exactly" like this?
(There is no "universal" "share").
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
i need to add option in proprieties of performance counter because the category name don't appear in properties
|
|
|
|
|
Sorry, what? Is this a C# application you're writing, or is it a question about Visual Studio?
This space for rent
|
|
|
|
|
This is not a good question - we cannot work out from that little what you are trying to do.
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with.
Perhaps if you try to show us sample code, and point out where your problem comes, it might help?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I'm going to guess what you are trying to do, but it may be way off.
AMMAR ALNAJIM wrote: because the category name don't appear in properties Sounds like the CategoryAttribute in a PropertyGrid. It would display the property in a separate category, if the property is decorated with it.
AMMAR ALNAJIM wrote: i need to add option in proprieties of performance counter So I'd be guessing you want that attribute on another property - but you can't change the code of the performance-counter class.
Anyway, this[^] might be interesting to you.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Hello
I have created a Form in C# and use DataGridView out there. As rows keep getting updated in the DataGridView, it works ok initially. However when I have to scroll down to see the rows added, the software freezes. The rows do get added, but I can't see them. I can only see the rows which get displayed initially in the window (without using scroll).
Where is the problem? Is it with the scroll?
Any help would be appreciated.
Thanks
Deepak
|
|
|
|
|
Member 13419803 wrote: Where is the problem? Most likely somewhere in your code, but it is anyone's guess where. You need to gather some more detailed information about what is happening.
|
|
|
|
|
Member 13419803 wrote: However when I have to scroll down to see the rows added, the software freezes Might be busy getting data, formatting it; which events did you hookup?
I'd also assume you're databinding. That will cause a slight delay when loading the data. If you don't want that delay, you could consider running in virtual mode[^].
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
my code is :
string word = "hello helloworld worldhello";
string[] lis = word.Split(' ');
foreach (string words in lis)
{
Regex rx = new Regex(reg, RegexOptions.IgnoreCase);
Match m = rx.Match(word);
word = word.Replace(words, " ");
}
richTextBox1.Text= word;
I put the "reg" string in my code as a comment to indicate that it doest work as expected
the output was :
world world
but I want :
helloworld worldhello
in other words I want to replace hello as a whole word only any help?
thanks
|
|
|
|
|
|
it doesn't work at all with me 
|
|
|
|
|
I think you are getting a bit confused here, you appear to be using two different method to do the same thing, but both of them half-heartedly. You never check if the match worked for example!
The simplest way to do this is to throw away the Regex - since you aren't actually using it at all - and just use the Split:
string words = "hello helloworld worldhello";
string[] lis = word.Split(' ');
List<string> outp = new List<string>();
foreach (string word in lis)
{
if (word != "hello")
{
outp.Add(word);
}
}
words = string.Join(" ", outp);
Console.WriteLine(words);
If you want to use a Regex, then it's not too bad:
string words = "hello helloworld worldhello";
words = Regex.Replace(words, @"\b" + "hello" + "\b", "");
Console.WriteLine(words);
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|