comment insert des données dans plusieurs tables à la fois

Je me request si le code que j'ai écrit est le meilleur moyen d'insert des données dans plusieurs tables.

Pour moi c'est la première fois que j'utilise du code pour insert des données dans la database.
Avant j'ai toujours utilisé les outils de Visual Studio pour le faire.

J'ai donc 1 textbox et quand je saisis un nom de produit et j'appuie sur le button Sauvegarder, je sauvegarde le produit dans 3 tables.

Mon code fonctionne mais est-ce un bon moyen de le faire?
Y a-t-il une meilleure façon de le faire?

private void SaveButton_Click(object sender, EventArgs e) { if (AddProductTables.Text != "") { try { Ssortingng ConnectionSsortingng = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\DataBase\MyStock.mdf;Integrated Security=True;Connect Timeout=30"; SqlConnection myconnection = new SqlConnection(ConnectionSsortingng); myconnection.Open(); SqlCommand StockCommand = myconnection.CreateCommand(); StockCommand.CommandText = "insert into Stock([Product]) values (@Product)"; StockCommand.Parameters.AddWithValue("@Product", AddProductTables.Text); SqlCommand LandhuisMisjeCommand = myconnection.CreateCommand(); LandhuisMisjeCommand.CommandText = "insert into LandhuisMisje([Product]) values (@Product)"; LandhuisMisjeCommand.Parameters.AddWithValue("@Product", AddProductTables.Text); SqlCommand TheWineCellarCommand = myconnection.CreateCommand(); TheWineCellarCommand.CommandText = "insert into TheWineCellar([Product]) values (@Product)"; TheWineCellarCommand.Parameters.AddWithValue("@Product", AddProductTables.Text); StockCommand.ExecuteNonQuery(); LandhuisMisjeCommand.ExecuteNonQuery(); TheWineCellarCommand.ExecuteNonQuery(); myconnection.Close(); MessageBox.Show("Saved"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Insert Product name"); } } 

Mettez simplement toutes les instructions dans une command séparée par un point-virgule:

 using (var connection = new SqlConnection(ConnectionSsortingng)) using (var command = connection.CreateCommand()) { connection.Open(); command.CommandText = @"insert into Stock([Product]) values (@Product); insert into LandhuisMisje([Product]) values (@Product); insert into TheWineCellar([Product]) values (@Product);" command.Parameters.AddWithValue("@Product", AddProductTables.Text); command.ExecuteNonQuery() } 

Je vous suggère de faire plusieurs INSERT séparés dans une TRANSACTION

 BEGIN TRANSACTION INSERT [...] INSERT [...] COMMIT TRANSACTION 

et vous devrez d'abord terminer la procédure pour la première table puis une autre comme indiqué ci-dessous: –

 sqlcmd.CommandText = "INSERT INTO Stock([Product]) values (@Product); sqlcmd.Parameters.AddWithValue("@Product", AddProductTables.Text); sqlCmd.ExecuteNonQuery(); sqlCmd.Parameters.Clear(); sqlcmd.CommandText = "INSERT INTO LandhuisMisje([Product]) values (@Product); sqlcmd.Parameters.AddWithValue("@Product", AddProductTables.Text); sqlCmd.ExecuteNonQuery(); 

De cette façon, vous pouvez atteindre par une seule variable de command au lieu de prendre plusieurs comme dans votre code

écrire tout le text de command, dans une déclaration et utilisé SET au lieu d'utiliser des valeurs .

 SqlCommand command = myconnection.CreateCommand(); StockCommand.CommandText = "insert into Stock SET [Product]=@Product; insert into LandhuisMisje SET [Product]=@Product; insert into TheWineCellar SET [Product]=@Product"; command.Parameters.AddWithValue("@Product", AddProductTables.Text); command.ExecuteNonQuery();