When you use a DataSet, or DataTable, with a DataAdapter object, you supply the DataAdapter with the SELECT statement to fill the DataSet. Your user makes any required changes to the data, then tells your app to update the database. This is where I think you're duplicating the functionality of the DataAdapter. The DataAdapter also needs the appropriate SQL commands for UPDATE, INSERT, and DELETE operations on the data it retrieved using the SELECT command. When the dirty data is written back to the database, the DataAdapter looks at each recond in the DataSet/DataTable and, using a flag attached to each record, decides which of those SQL commands to execute for that record, if any. You may be doing the same thing, or something similar. But, in any case, you're probably duplicating the functionality of the DataAdapter. RageInTheMachine9532 "...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome