|
Hi,
I have a DataSet that has a calculated column (note: DataSet not originally populated by a source file, not that that matters I guess). I want to save the DataSet to an MS Access db file with the DataAdapter (not a problem with no computed columns). The DataAdapter.Update does not calculate the values (too easy!). Can anyone tell me how I could convert/save/copy this calculated column to a column that is not seen as calculated? Any help on this is greatly appreciated (please show code sample as I'm new to programming).
Thanks,
Ron
|
|
|
|
|
You could write the DataSet out to a stream and read it back into a generic (i.e., not typed) DataSet without writing the schema.
For example, les say your typed DataSet is called CustomOrders :
using (MemoryStream ms = new MemoryStream())
{
customOrders1.WriteXml(ms, XmlWriteMode.IgnoreSchema);
ms.Seek(0, SeekOrigin.Begin);
DataSet ds = new DataSet("CustomerOrders");
ds.ReadXml(ms);
oleDbDataAdapter1.Update(ds);
} The column - without the schema - would seem as a normal, non-computed column.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanks Heath!
I'll give it a go
Ron
|
|
|
|
|
Im a college student and I need to write a program to enter, modify and display information for a user and give that user an id number. The program is supposed to represent health club operations.
My menu looks like:
1. Enter new member
2. Modify Details
3. Display member information
4. Exit
Within the new member case the user has to put in age, name, weight and a id number. I don't know how i can display the information for a specific member id and then edit it? would i need to make an array of id's? Should i put all the details in a single string? Im a bit stuck!
Any help greatly appreciated
|
|
|
|
|
dan_ta22 wrote:
I don't know how i can display the information for a specific member id and then edit it? would i need to make an array of id's? Should i put all the details in a single string? Im a bit stuck!
First, you need to store data in a convenient format, you can use XML file or database, for example. You have a lot of learning to do if you don't know what is XML or database.
You should definitely not do it with a single string.
My articles and software tools
|
|
|
|
|
Im not studying c-programming, its just part of my electronics advanced diploma. The project needs to be only done within c++ itself. Since we were only lectured on functions,pointers,arrays,strings, and file i/o we have to use these options to create the program.
|
|
|
|
|
Since this is probably a school project, I'm not going to give you specifics. However here are some things to consider in your design:
1) You need to be able to assign a unique ID to each customer
this suggests that you will have an ID tracker (usually a record with
the last ID assigned to a customer.
2) You need to have records and the ability to randomly read
data. This suggests that your using a database (like Access?)
3) The data you need to keep (member info) would be fields within your
database. If you went about keeping everying in a single string,
you'd have a tough time figuring out how to parse out the individual
data pieces (where does one end and the next field begin).
So this suggests that you have a form which exposes the 4 functions with a windowed area to create/display/modify the member info. The member data you listed would just be text boxes that hold the data and labels that tell the user what data they are looking at....
Member ID [ ]
Member Name [ ]
Age [ ]
Height [ ] feet [ ] inches
Weight [ ]
______________________________
The Tao gave birth to machine language.
Machine language gave birth to the assembler.
The assembler gave birth to ten thousand languages.
Each language has its purpose, however humble.
Each language expresses the Yin and Yang of software.
Each language has its place within the Tao.
Beauty exists because we give a name to C#.
Bad exists because we give a name to COBOL.
|
|
|
|
|
Thanks for your information because it just reminded me that i can use c++ to create a file and directly write into it the member information and use a id number as the file pointer. The project is part of my advanced diploma in electronics so im not actually studying c++.
Thanks
|
|
|
|
|
I created a windows service using c# and when I try the following:
using System.Web.Mail;
I get this error:
"The type or namespace name 'Mail' does not exist in the class or namespace 'System.Web' (are you missing an assembly reference?)"
Can someone help me decipher this?
What I'm trying to do is basically send an email through a web service using MailMessage and SmtpMail. So if someone knows a better way of doing this I'd appreciate that too
|
|
|
|
|
You need to add a refrence to the System.Web namespace. Are you in visual studio? If so, just right click on 'Refrences' in the Solution Tab thing. Then select it.
/\ |_ E X E GG
|
|
|
|
|
Yup that's it, thanks for the help. I'm a C++/SQL programmer who was rushed into .NET... fun so far though
|
|
|
|
|
Referencing assemblies is akin to binding libraries. If you need a type defined in another assembly, you have to reference it. Just like if you need to call a function or use a class defined in another library, you have to link it.
Hope that helps.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hello,
I recently stumbled across a huge performance difference involving writing out a large hash table to a file. The hashtable is holding a very simple object called Token, that holds a string value called token and a couple counters. ToString() is overriden for the object to return:
tokenstring [space] counter1 [space] counter2
If I iterate through the values of the hashtable and write it out to a file, it takes around 1 minute and 40 seconds to complete.
Seems a little slow. Here is the weird part. If I iterate through the values of the hashtable and add them to an arraylist and then iterate through the arraylist to write out the values, it takes between 10 and 12 seconds.
The hash table is large, as the file that is written out is 39 Mb where each line is around 18 characters, where each line represents one hash table entry.
Below is some of my test code to clarify the situation if my explanation above has anyone confused. WriteTokensSlow takes about 1 minutes and 40 seconds. WriteTokensFast takes between 10 and 12 seconds.
private void WriteTokensSlow()
{
WriteCollection(tokensHT.Values);
}
private void WriteTokensFast()
{
ArrayList tokenList = new ArrayList(tokensHT.Values);
WriteCollection(tokenList);
}
private void WriteCollection(ICollection collection)
{
using (StreamWriter sw = new StreamWriter(savePath,false))
{
foreach (Token tokenItem in collection)
sw.WriteLine(tokenItem.ToString());
}
}
Can anyone explain why this is happening? Thanks.
|
|
|
|
|
Im stumped! Both operations are O(n) I cant understand why one should take so much longer (if thats the only code).
top secret xacc-ide 0.0.1
|
|
|
|
|
The difference is in the enumerator. The Hashtable.Values property is, of course, an ICollection (which you already know). Hashtable+ValueCollection.GetEnumerator returns a Hashtable+HashtableEnumerator , which is significantly more complex (and hence slower) than the simple ArrayList+ArrayListEnumerator used when you enumerate the ArrayList .
When you create an ArrayList from an ICollection , Array.Copy is used to perform a shallow or deep copy depending on whether the source and destination arrays hold reference or value types. Either way, this operation is much faster than enumerating a collection and is also handled by the runtime itself (native code). For both these reasons, copying the arrays is much faster.
Hope that helps.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
That's why I try my damndest not to use the foreach construct unless there is absolutely no alternative. Enumeration sucks.
Jeremy Kimball
I have traveled the gutters, lo these many days, with no signs of life. Well met.
-brianwelsch
|
|
|
|
|
The problem here, though, isn't enumeration in general. It's the Hashtable+HashtableEnumerator that's the problem (though I wouldn't call it a problem). A Hashtable isn't a simple collection (it's not really a collection at all), so enumeration is complicated. Enumerating over an ArrayList (using the ArrayList+ArrayListEnumerator ) is much, much faster, as his performance results showed.
The problem here is just a case of using the right enumeration. It wasn't just the native code behind Array.Copy that produced better results (the ArrayList was still enumerated, remember).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Doh...that's what I get for not reading the original code thoroughly...for some reason, my brain translocated the foreach loop.
At any rate, although it's extremely unlikely, might leppie be on to something with collisions? What method does the Hashtable use to solve collisions, some sort of linked bucket? Only problem with that theory is insertion would take a much longer time as well...
Jeremy Kimball
I have traveled the gutters, lo these many days, with no signs of life. Well met.
-brianwelsch
|
|
|
|
|
No, because collisions occur when you insert items into a Hashtble . The original post is merely enumerating it. That merely entails enumerating the root buckets as well as any child buckets. In such a case, no hashing is necessary at all.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi Heath,
If you chage the WriteTokensFast function to this:
private void WriteTokensFast()
{
ArrayList tokenList = new ArrayList();
foreach (Token tokenItem in tokensHT.Values)
tokenList.Add(tokenItem);
WriteCollection(tokenList);
}
It still only takes 10 to 12 seconds to run even though it is iterating through the Values and casting them to a Token object (the slow function takes a minute and 40 seconds).
|
|
|
|
|
Interesting, though there is another likely possibility: if this is the first time your using those particular types, they must be JIT compiled. After that is complete, the types are cached as native code so the performance is akin to native code.
Try reversing the order of your calls and you should find the previously faster one takes as much time.
The Hashtable+HashtableEnumerator is still more complex. I'm surprised your not seeing a significant difference with around 39 MB of data in the Hashtable . I would expect a few seconds difference.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi Heath,
I actually ran these in separate test app runs. They weren't getting executed in the same process one after another, so that wouldn't be it.
I am completely clueless to the cause, but I spent a lot of time testing slightly different scenarios to figure out where the problem was with the slow function. I've basically ruled out iterating through the hashtable and casting as the culprits, but that leaves me with nothing.
I've been programming using C# and the .Net framework since the beta of version 1 was available, and this is easily the strangest performance quirk I have come across.
|
|
|
|
|
the real bryon wrote:
I've been programming using C# and the .Net framework since the beta of version 1 was available
Same here. That case is far from true for the majority of programmers (notice I didn't say "developers"?) that come here.
The only other thing I can think of is to profile the code and see where the bottleneck is. You can download a decent free one somewhere on MSDN, and there's other commercial ones around the 'net (including the Ants profile that advertises here on CodeProject).
This sure is a strange problem.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Interesting, I didnt notice passing your ICollection implentation as a parameter to the constructor, uses that. I will keep this in mind
However, I still cannot see why it should take so much longer. Maybe fixing the Capacity to a HUGE initial value could solve it, the only thing I can think of is collision checking, so the hash is more spread, that will require more memory too.
top secret xacc-ide 0.0.1
|
|
|
|
|
When you pass an ICollection to the ArrayList ctor, the Capacity is set to the number of elements in the ICollection using the Count , yes.
Microsoft MVP, Visual C#
My Articles
|
|
|
|