ADO.NET - mise à Jour de Plusieurs tables de données
Donc j'ai un code comme ceci:
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();
Est-il de toute façon à en faire une beaucoup plus simple? Qu'arriverait-il si l'ordinateur s'est écrasé sur la ligne après "dataAdapter2.Mise à jour(dataTable2);"? Je voudrais être capable de quelque utilisez juste un appel de mise à Jour pour tout mettre à jour. Est-ce possible?
Aussi, est-ce vraiment la meilleure façon de le faire? Avec "ce" en cours de création d'un tas de nouvelles lignes dans plusieurs tables en fonction de ce qui est dans une ligne dans une table spécifique.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer d'un ensemble de données en un DataAdapter de l'instruction de mise à Jour,
qui sera mise à jour toutes les tables dans le jeu de données.mise à JOUR: Non, il ne le fait pas. DataAdapters toujours mettre à jour une seule table. Le dispositif de mise à Jour() qui prend un ensemble de données comme paramètre, à partir de la La documentation MSDN, "les Appels respectifs INSERT, UPDATE, ou DELETE pour chaque insérées, mises à jour ou effacées ligne dans l'ensemble de données spécifiques à partir d'un DataTable nommé "Table"." Désolé pour la confusion. Le reste de la réponse est toujours valable, si.Si vous voulez vous assurer que toutes les mises à jour de réussir ou d'échouer comme une unité atomique, utilisez le SqlTransaction objet:
SqlDataAdapter.Update()
a une surcharge qui accepte un ensemble de données. Et en effet, il n'. Mais ensuite j'ai vu votre point de vue, et de creuser un peu plus loin. Vous avez raison, DataAdapters mettre à jour une seule table. La surcharge qui prend un DataSet recherche une table à l'intérieur de l'ensemble de données nommée "Table". Mon erreur. Je vais mettre à jour ma réponse en conséquence.