Maison >développement back-end >C++ >Comment puis-je insérer efficacement des données en masse avec des requêtes paramétrées en C# ?
En C#, l'insertion de plusieurs lignes dans une base de données peut être un processus fastidieux si chaque ligne nécessite un INSERT distinct déclaration. Pour optimiser les performances, il est souhaitable d'insérer plusieurs lignes dans une seule requête tout en utilisant également des requêtes paramétrées pour empêcher les attaques par injection SQL.
Pour y parvenir, vous pouvez exploiter la puissance des paramètres table, qui vous permettent pour transmettre un type de données structurées (comme un DataTable) à une procédure stockée. Cela vous permet d'insérer plusieurs lignes avec une seule commande.
Pour mettre en œuvre cette approche, suivez ces étapes :
Créez un UDT pour représenter les lignes que vous souhaitez insérer. Par exemple, si vous avez des colonnes « Col1 » et « Col2 », vous pouvez créer un UDT comme suit :
CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO
Créez une procédure stockée pour accepter l'UDT comme paramètre :
CREATE PROCEDURE MyProcedure ( @MyTable dbo.MyTableType READONLY -- Table valued parameters must be ReadOnly! ) AS INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable GO
Remplissez un DataTable avec vos données :
DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate data
Ouvrez une connexion et exécutez la procédure stockée à l'aide d'une SqlCommand :
using (var con = new SqlConnection("ConnectionString")) { using(var cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@MyTable", SqlDbType.Structured).Value = dt; con.Open(); cmd.ExecuteNonQuery(); } }
Par en utilisant des paramètres table et des procédures stockées, vous pouvez améliorer considérablement les performances des insertions en masse, tout en conservant la sécurité et l'efficacité des insertions paramétrées. requêtes.
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!