J'ai un code comme ceci:ADO.NET - Mise à jour de plusieurs DataTables
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();
Y at-il de toute façon de faire cela beaucoup plus simple? Que se passerait-il si l'ordinateur plantait sur la ligne après "dataAdapter2.Update (dataTable2);"? Je voudrais être en mesure d'utiliser en quelque sorte un seul appel Update pour tout mettre à jour. Est-ce possible?
Aussi, est-ce encore la meilleure façon de le faire? Avec "ceci" étant la création d'un tas de nouvelles lignes dans plusieurs tables en fonction de ce qui est dans une ligne spécifique dans une table spécifique.
Comment peut-on dataAdapter savoir comment mettre à jour plusieurs tables stockées dans un DataSet? J'ai utilisé plusieurs DataAdapters car ils ont chacun sélectionné des tables différentes dans la base de données, puis utilisé CommandBuilder sur chaque DataAdapter pour générer la commande Update/Insert automatiquement. – gamzu07
En réponse à votre question, j'ai commencé à signaler que la [documentation MSDN] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.update.aspx) pour 'SqlDataAdapter .Update() 'a une surcharge qui accepte un DataSet. Et en effet, c'est le cas. Mais ensuite j'ai vu votre point de vue, et creusé un peu plus loin. Vous avez raison, DataAdapters ne met à jour qu'une seule table. La surcharge qui prend un DataSet recherche une table dans le DataSet appelée "Table". Mon erreur. Je vais mettre à jour ma réponse en conséquence. –
J'ai également trouvé que les choses doivent être faites dans cet ordre: 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