1
所以我有一些像这样的代码:ADO.NET - 更新多个数据表
DataSet dataSet = new DataSet();
DataTable dataTable1 = new DataTable("Table1");
DataTable dataTable2 = new DataTable("Table2");
DataTable dataTable3 = new DataTable("Table3");
DataTable dataTable4 = new DataTable("Table4");
dataSet.Tables.Add(dataTable1);
dataSet.Tables.Add(dataTable2);
dataSet.Tables.Add(dataTable3);
dataSet.Tables.Add(dataTable4);
SqlDataAdapter dataAdapter1 = new SqlDataAdapter("SELECT * FROM Table1 WHERE ID = 1", sqlConnection);
SqlDataAdapter dataAdapter2 = new SqlDataAdapter("SELECT Column1, Column2, Column3 FROM Table2", sqlConnection);
SqlDataAdapter dataAdapter3 = new SqlDataAdapter("SELECT Column1, Column2, Column3 FROM Table3", sqlConnection);
SqlDataAdapter dataAdapter4 = new SqlDataAdapter("SELECT Column1, Column2, Column3 FROM Table4", sqlConnection);
SqlCommandBuilder commandBuilder1 = new SqlCommandBuilder(dataAdapter1);
SqlCommandBuilder commandBuilder2 = new SqlCommandBuilder(dataAdapter2);
SqlCommandBuilder commandBuilder3 = new SqlCommandBuilder(dataAdapter3);
SqlCommandBuilder commandBuilder4 = new SqlCommandBuilder(dataAdapter4);
dataAdapter1.Fill(dataTable1);
dataAdapter2.FillSchema(dataTable2, SchemaType.Source);
dataAdapter3.FillSchema(dataTable3, SchemaType.Source);
dataAdapter4.FillSchema(dataTable4, SchemaType.Source);
//do a bunch of code that updates the one row from Table1
//and adds lots of new rows to Table2, Table3, Table4
dataAdapter1.Update(dataTable1);
dataAdapter2.Update(dataTable2);
dataAdapter3.Update(dataTable3);
dataAdapter4.Update(dataTable4);
dataSet.AcceptChanges();
反正是有使这个简单了很多?如果计算机在“dataAdapter2.Update(dataTable2);”之后崩溃,会发生什么情况?我希望能够以某种方式使用一个更新呼叫来更新所有内容。那可能吗?
此外,这是甚至是最好的方式来做到这一点?使用“this”在多个表中创建一堆新行,具体取决于某个特定表中某个特定行的内容。
如何将一个DataAdapter的知道如何更新存储在DataSet中的多个表?我使用了多个DataAdapter,因为它们都从数据库的不同表中选择,然后在每个DataAdapter上使用CommandBuilder自动构建Update/Insert命令。 – gamzu07 2011-05-05 13:30:23
为了回应你的问题,我开始指出'SqlDataAdapter的[MSDN文档](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.update.aspx) .Update()'有一个接受DataSet的重载。确实如此。但后来我看到了你的观点,并且进一步挖掘了一点。你是正确的,DataAdapters只更新一个表。采用DataSet的重载在DataSet中查找名为“Table”的表。我的错。我会相应地更新我的答案。 – 2011-05-05 13:43:38
我也发现需要按以下顺序完成: dA = new SqlDataAdapter(“SELECT * FROM Table”,cn); dA.SelectCommand.Transaction = tran; commandBuilder = new SqlCommandBuilder(dA); dA.InsertCommand = commandBuilder.GetInsertCommand(); dA.UpdateCommand = commandBuilder.GetUpdateCommand(); dA.DeleteCommand = commandBuilder.GetDeleteCommand(); dA.InsertCommand.Transaction = tran; dA.UpdateCommand.Transaction = tran; dA.DeleteCommand.Transaction = tran; – gamzu07 2011-05-05 15:27:55