C# では、各行に個別の INSERT が必要な場合、データベースに複数の行を挿入するのに時間がかかるプロセスになる可能性があります。声明。パフォーマンスを最適化するには、単一のクエリに複数の行を挿入し、同時にパラメータ化されたクエリを利用して SQL インジェクション攻撃を防ぐことが望ましいです。
これを実現するには、テーブル値パラメータの機能を利用できます。構造化データ型 (DataTable など) をストアド プロシージャに渡します。これにより、1 つのコマンドで複数の行を挿入できます。
このアプローチを実装するには、次の手順に従います。
挿入する行を表す UDT を作成します。たとえば、列「Col1」と「Col2」がある場合、次のように UDT を作成できます:
CREATE TYPE MyTableType AS TABLE ( Col1 int, Col2 varchar(20) ) GO
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
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 サイトの他の関連記事を参照してください。