Ce guide montre comment insérer efficacement plusieurs lignes dans une base de données SQL Server (2008 ou version ultérieure) à l'aide d'une seule requête paramétrée en C#. Cette technique, utilisant des paramètres table, améliore considérablement les performances par rapport aux instructions d'insertion individuelles.
Commencez par créer un type de table défini par l'utilisateur dans SQL Server pour représenter la structure de données de votre insertion :
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO</code>
Ensuite, créez une procédure stockée qui accepte ce type de table défini par l'utilisateur comme paramètre :
<code class="language-sql">CREATE PROCEDURE MyProcedure ( @MyTable dbo.MyTableType READONLY -- READONLY is crucial for table-valued parameters ) AS BEGIN INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable; END; GO</code>
Dans votre code C#, construisez un DataTable
pour contenir les données que vous souhaitez insérer :
<code class="language-csharp">DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate the DataTable with your data here... For example: DataRow row1 = dt.NewRow(); row1["Col1"] = 1; row1["Col2"] = "Value 1"; dt.Rows.Add(row1); // ...add more rows as needed...</code>
Enfin, exécutez la procédure stockée en utilisant SqlCommand
:
<code class="language-csharp">using (SqlConnection con = new SqlConnection("YourConnectionString")) { using (SqlCommand cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); //AddWithValue handles SqlDbType automatically con.Open(); cmd.ExecuteNonQuery(); } }</code>
Cette méthode fournit un moyen très efficace d'insérer plusieurs lignes avec des valeurs paramétrées, évitant ainsi les vulnérabilités d'injection SQL et améliorant les performances de la base de données par rapport aux instructions INSERT
individuelles. N'oubliez pas de remplacer "YourConnectionString"
par votre chaîne de connexion réelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!