В зависимости от того, сколько строк в DataSet у вас есть, вероятно, лучше всего будет использовать SqlCommandBuilder, например:
var connection = new SqlConnection("my connection string");
connection.Open();
// repeat for each table in data set
var adapterForTable1 = new SqlDataAdapter("select * from table1", connection);
var builderForTable1 = new SqlCommandBuilder(adapterForTable1);
adapterForTable1.Update(myDataSet, "Table1");
Если у вас есть сложные отношения, определенные между таблицами в DataSet, боюсь, вы не можете использовать SqlCommandBuilder. Вместо этого вам нужно определить адаптер данных для каждой таблицы в вашем наборе данных. Затем обновите таблицы в DataSet в порядке зависимостей (т. Е. Сначала делайте таблицы без зависимостей, затем с зависимыми таблицами).
Вот пример вставки родитель / потомок (обратите внимание, что вы будете делать аналогичные вещи для обновлений). Table1 является родительским и имеет ParentId (столбец идентификации) и поле NVARCHAR ParentValue. Table2 является дочерним, имеет собственный столбец идентификаторов (ChildId), поле внешнего ключа (ParentId) и свое собственное значение (ChildValue).
var myDataSet = new DataSet();
// ** details of populating the dataset omitted **
// create a foreign key relationship between Table1 and Table2.
// add a constraint to Table2's ParentId column, indicating it must
// existing in Table1.
var fk = new ForeignKeyConstraint("fk", myDataSet.Tables["Table1"].Columns["ParentId"], myDataSet.Tables["Table2"].Columns["ParentId"])
{
DeleteRule = Rule.Cascade,
UpdateRule = Rule.Cascade
};
myDataSet.Tables["Table2"].Constraints.Add(fk);
myDataSet.EnforceConstraints = true;
var connection = new SqlConnection("my connection string");
var adapterForTable1 = new SqlDataAdapter();
adapterForTable1.InsertCommand =
new SqlCommand("INSERT INTO MasterTable (ParentValue) VALUES (@ParentValue); SELECT SCOPE_IDENTITY() AS ParentId", connection);
adapterForTable1.InsertCommand.Parameters.Add("@ParentValue", SqlDbType.NVarChar).SourceColumn = "ParentValue";
var adapterForTable2 = new SqlDataAdapter();
adapterForTable2.InsertCommand =
new SqlCommand("INSERT INTO ChildTable (ParentId, ChildValue) VALUES (@ParentId, @ChildValue); SELECT SCOPE_IDENTITY() AS ChildId", connection);
adapterForTable2.InsertCommand.Parameters.Add("@ParentId", SqlDbType.Int).SourceColumn = "ParentId";
adapterForTable2.InsertCommand.Parameters.Add("@ChildValue", SqlDbType.NVarChar).SourceColumn = "ChildValue";
connection.Open();
adapterForTable1.Update(myDataSet, "Table1"); // insert rows in parent first
adapterForTable2.Update(myDataSet, "Table2"); // child second