Skip to main content

DataSet: More reasons to not like it

So I am still living in the world of DataSets, when will I ever learn?

The task was simple, take the contents of DataSetA and merge it into DataSetB. Sure, just use:

DataSetA.Merge(DataSetB, true)

and life will be good. But wait! Why is it when I try to save the merged data from DataSetB to the database it doesn't show up?

Because the RowState of all the rows in all the tables are set to Unchanged! And a merge operation does not change the RowState. So if I want all the data from B to be saved to A I have to change all the row states of all the tables to Added. Sure, I should be able to loop thorough it all and set the row's state as such:

row.RowState = DataRowState.Added;

Not so fast grasshopper! row.RowState does not have a setter! Isn't that Asinine! You have to use:


What ever, I say setter, you say method. Long story short I created an extension method that works.

public static DataSet MergerAllDataAsNew(this DataSet target, DataSet source)
foreach (DataTable table in source.Tables)
foreach (DataRow row in table.Rows)

target.Merge(source, true);

return target;

Brute Force works.


Popular posts from this blog

C# Spirograph Point Generators

Spirograph's  are cool.  See here and here . I put together three ways to generate points for a Spirograph, first using a Brute Force straight generate the points, second using a Parallel.For and third using LINQ.

FileSystemWatcher With the BlockingCollection

While working with the FileSystemWatcher I found that if too many files were created the built in buffer will overflowed and files will be skipped.  After much research I found out about the Producer-Consumer Problem .  Then I found that .Net 4 has the BlockingCollection which helps solve the issue.  But how to use it with the FileSystemWatcher? On StackOverflow I found  Making PLINQ and BlockingCollection work together .  I'm not so interested in the PLINQ issue but this is a great example of using The BlockingCollection with FileSystemWatcher. [csharp] using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; namespace ConsoleApplication4 {     public class Program     {         private const string Folder = "C:\\Temp\\InputData";         static void Main(string[] args) {             var cts = new CancellationTokenSource();             foreach (var obj in Input(cts.Token))            

Remote Controlled RoboTank

This is my version of the ever popular to build RoboTank. It uses an Arduino Mega 2560 with the AdaFruit motor shield and an XBee S1 to communicate to the DFRobot Gamepad. The sketch for the RoboTank makes use of the AFMotor.h to drive the motors and includes a serial parser to read and process the commands coming from the Gamepad. DFRobot Wireless Joystick