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# ?

Comment puis-je insérer efficacement des données en masse avec des requêtes paramétrées en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 21:58:39580parcourir

How Can I Efficiently Bulk Insert Data with Parameterized Queries in C#?

Insertion groupée de variables paramétrées dans une base de donné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 :

1. Créez un type de table défini par l'utilisateur (UDT)

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

2. Créer une procédure stockée

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

3. Exécutez la procédure stockée depuis C

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn