ホームページ > バックエンド開発 > C++ > C# から複数のパラメーター化された行を SQL Server データベースに効率的に挿入するにはどうすればよいですか?

C# から複数のパラメーター化された行を SQL Server データベースに効率的に挿入するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-05 00:47:40
オリジナル
209 人が閲覧しました

How Can I Efficiently Insert Multiple Parameterized Rows into a SQL Server Database from C#?

C でパラメータ化された複数の行をデータベースに挿入する

膨大なデータセットや頻繁な更新を扱う場合、データベース操作を最適化することが重要です。 C# でデータベースに複数の行を効率的に挿入することは、特にデータが Web ソースから受信され、セキュリティ目的でパラメータ化する必要がある場合に、重大な課題を引き起こします。

現在のアプローチの制限

提供されるコードスニペットはループを利用して各データ要素に対して個別の挿入ステートメントを実行します:

foreach(string data in Scraper){
    // ...
    Command.executeNonQuery(); 
    conn.close();
}
ログイン後にコピー

ただし、この反復的なアプローチは非効率的であり、次のような問題が発生する可能性があります。

テーブル値パラメーターを使用した最適化されたソリューション

SQL Server 2008 以降でのデータ挿入をより高速かつ効率的に行うために、テーブル値パラメーターは魅力的なソリューションを提供します。ユーザー定義のテーブル タイプを定義し、ストアド プロシージャでそれを利用すると、1 回の操作で複数の行を挿入できます。

ステップ 1: ユーザー定義のテーブル タイプを作成する

CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20) 
)
ログイン後にコピー

ステップ 2: テーブル値を使用してストアド プロシージャを作成するパラメータ

CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- NOTE: table valued parameters must be Readonly!
)
AS

INSERT INTO MyTable (Col1, Col2)
SELECT Col1, Col2 
FROM @MyTable
ログイン後にコピー

ステップ 3: C# からストアド プロシージャを実行する

DataTable dt = new DataTable();
// Fill data table with values...

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();
    }
}
ログイン後にコピー

テーブル値パラメータを使用する利点

  • ネットワーク トラフィックの削減:複数の INSERT ステートメントを送信する代わりに、行のバッチを含むリクエストが 1 つだけ送信されます。
  • パフォーマンスの向上: データベース エンジンは挿入プロセスを最適化し、実行時間の短縮につながります。
  • セキュリティの強化: データ値はデータ値とは別に渡されるため、パラメーター化されたクエリは SQL インジェクション攻撃の防止に役立ちます。クエリ。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート