Maison >base de données >tutoriel mysql >Comment puis-je insérer efficacement des données paramétrées en masse dans SQL Server à l'aide de C# ?

Comment puis-je insérer efficacement des données paramétrées en masse dans SQL Server à l'aide de C# ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-12 07:31:47408parcourir

How Can I Efficiently Bulk Insert Parameterized Data into SQL Server Using C#?

Optimisation de l'insertion de données en masse dans SQL Server avec C#

La gestion de grands ensembles de données nécessite souvent des techniques d'insertion de bases de données efficaces. Lorsqu'il s'agit de données provenant du Web, les requêtes paramétrées sont cruciales pour la sécurité et les performances. Cet article démontre une méthode supérieure à l'approche ligne par ligne courante et inefficace.

Résolution des insertions inefficaces à une seule rangée

L'insertion itérative à l'aide d'instructions INSERT individuelles (par exemple, INSERT INTO DATABASE('web',@data)) est lente et vulnérable à l'injection SQL.

La solution : les paramètres évalués par table (TVP)

SQL Server 2008 et les versions ultérieures prennent en charge les paramètres table (TVP), offrant une méthode très efficace pour l'insertion en masse tout en conservant le paramétrage pour la sécurité.

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

Commencez par créer un UDT qui reflète la structure de votre table de base de données cible :

<code class="language-sql">CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20)
)
GO</code>

2. Création d'une procédure stockée avec un TVP

Ensuite, créez une procédure stockée acceptant le TVP :

<code class="language-sql">CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- READONLY is crucial for TVPs!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2
FROM @MyTable

GO</code>

3. Implémentation C# à l'aide du TVP

Le code C# utilise un DataTable pour conserver les données avant l'insertion :

<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

using (var con = new SqlConnection("ConnectionString"))
{
    using (var cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@MyTable", dt); // Simplified parameter addition
        con.Open();
        cmd.ExecuteNonQuery();
    }
}</code>

Cette approche exploite les TVP pour une insertion de données en masse beaucoup plus rapide et plus sécurisée par rapport aux INSERT déclarations individuelles. L'utilisation de AddWithValue simplifie la gestion des paramètres. N'oubliez pas de remplacer "ConnectionString" 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!

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