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