ホームページ >データベース >mysql チュートリアル >C# を使用してパラメーター化されたデータを SQL Server に効率的に一括挿入するにはどうすればよいですか?

C# を使用してパラメーター化されたデータを SQL Server に効率的に一括挿入するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-12 07:31:47408ブラウズ

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

C# を使用した SQL Server への一括データ挿入の最適化

大規模なデータセットを処理するには、多くの場合、効率的なデータベース挿入手法が必要になります。 Web ソースのデータを扱う場合、パラメータ化されたクエリはセキュリティとパフォーマンスにとって非常に重要です。この記事では、一般的で非効率な行ごとのアプローチよりも優れた方法を説明します。

非効率な単一行挿入への対処

個々の INSERT ステートメント (INSERT INTO DATABASE('web',@data) など) を使用した反復挿入は時間がかかり、SQL インジェクションに対して脆弱です。

解決策: テーブル値パラメーター (TVP)

SQL Server 2008 以降のバージョンは、テーブル値パラメータ (TVP) をサポートしており、セキュリティのためのパラメータ化を維持しながら、一括挿入のための非常に効率的な方法を提供します。

1.ユーザー定義テーブル タイプ (UDT) の定義

まず、ターゲット データベース テーブルの構造をミラーリングする UDT を作成します。

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

2. TVP

を使用したスト​​アド プロシージャの作成

次に、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. TVP

を使用した C# 実装

C# コードは、DataTable を利用して挿入前にデータを保持します。

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

このアプローチでは、TVP を活用して、個々の INSERT ステートメントと比較して、大幅に高速かつ安全な一括データ挿入を実現します。 AddWithValue を使用すると、パラメーターの処理が簡素化されます。 "ConnectionString" を実際の接続文字列に置き換えることを忘れないでください。

以上がC# を使用してパラメーター化されたデータを SQL Server に効率的に一括挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。