ホームページ >バックエンド開発 >C++ >C# でパラメーター化されたクエリを使用してデータを効率的に一括挿入するにはどうすればよいですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2025-01-03 21:58:39610ブラウズ

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

C でパラメータ化された変数をデータベースに一括挿入する

C# では、各行に個別の INSERT が必要な場合、データベースに複数の行を挿入するのに時間がかかるプロセスになる可能性があります。声明。パフォーマンスを最適化するには、単一のクエリに複数の行を挿入し、同時にパラメータ化されたクエリを利用して SQL インジェクション攻撃を防ぐことが望ましいです。

これを実現するには、テーブル値パラメータの機能を利用できます。構造化データ型 (DataTable など) をストアド プロシージャに渡します。これにより、1 つのコマンドで複数の行を挿入できます。

このアプローチを実装するには、次の手順に従います。

1.ユーザー定義テーブル タイプ (UDT) を作成する

挿入する行を表す UDT を作成します。たとえば、列「Col1」と「Col2」がある場合、次のように UDT を作成できます:

CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20)
)
GO

2。ストアド プロシージャの作成

UDT をパラメータとして受け入れるストアド プロシージャを作成します:

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. C からストアド プロシージャを実行します

DataTable にデータを設定します:

DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(int));
dt.Columns.Add("Col2", typeof(string));

// Populate data

接続を開き、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();
    }
}

Byテーブル値パラメーターとストアド プロシージャを利用すると、一括挿入のパフォーマンスを大幅に向上させながら、セキュリティと効率を維持できます。パラメータ化されたクエリ。

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

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