ホームページ >データベース >mysql チュートリアル >C# を使用してパラメーター化されたデータを SQL Server に効率的に一括挿入するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。