C# でのデータベース挿入の最適化: 単一のパラメーター化されたクエリのアプローチ
多数の行をデータベースに個別に挿入するのは非効率です。 この記事では、C# で単一のパラメーター化されたクエリを使用して一括挿入を実現する高パフォーマンスの方法を示します。
重要なのは、ストアド プロシージャとテーブル値パラメーターを活用することです。 このアプローチには、次の 3 つの主要な手順が含まれます。
テーブルタイプの定義:
カスタム SQL Server テーブル タイプを作成して、列名とデータ型を指定してデータの構造を定義します。
ストアド プロシージャの作成:
カスタム テーブル タイプを読み取り専用のテーブル値パラメータとして受け入れるストアド プロシージャを開発します。この手順により、ターゲット データベース テーブルにデータが挿入されます。 テーブル値パラメーターは である必要があります は READONLY
.
C# コードの実装:
C# アプリケーション内:
DataTable
オブジェクトを作成します。DataTable
に、挿入するデータを入力します。DataTable
をテーブル値パラメーターとして渡して、ストアド プロシージャを実行します。このプロセスを示す例は次のとおりです:
テーブルタイプ (SQL):
<code class="language-sql">CREATE TYPE MyTableType AS TABLE ( Col1 INT, Col2 VARCHAR(20) ) GO</code>
ストアド プロシージャ (SQL):
<code class="language-sql">CREATE PROCEDURE MyProcedure (@MyTable MyTableType READONLY) AS BEGIN INSERT INTO MyTable (Col1, Col2) SELECT Col1, Col2 FROM @MyTable; END; GO</code>
C# コード:
<code class="language-csharp">using System.Data; using System.Data.SqlClient; // ... other code ... DataTable dt = new DataTable(); dt.Columns.Add("Col1", typeof(int)); dt.Columns.Add("Col2", typeof(string)); // Populate dt with your data here... e.g., //DataRow row = dt.NewRow(); //row["Col1"] = 1; //row["Col2"] = "Value1"; //dt.Rows.Add(row); using (SqlConnection con = new SqlConnection("ConnectionString")) { using (SqlCommand cmd = new SqlCommand("MyProcedure", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@MyTable", dt); //AddWithValue handles type inference con.Open(); cmd.ExecuteNonQuery(); } }</code>
この方法では、データベースの往復回数が減り、データベースの挿入効率が大幅に向上し、より高速でスケーラブルなデータ処理が可能になります。
以上がC# を使用してパラメータ化された複数の行をデータベースに効率的に挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。