在C# 中,如果每行都需要單獨的INSERT,則將多行插入資料庫可能是一個耗時的過程陳述。為了優化效能,最好在單一查詢中插入多行,同時利用參數化查詢來防止 SQL 注入攻擊。
為了實現這一點,您可以利用表值參數的強大功能,它允許您將結構化資料類型(例如 DataTable)傳遞給預存程序。這使您能夠使用單一命令插入多行。
要實作此方法,請依照下列步驟操作:
建立 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 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(); } }
透過利用表值參數和預存程序,您可以顯著提高批次插入的效能,同時也保持參數化的安全性和效率查詢。
以上是如何在 C# 中透過參數化查詢有效地批量插入資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!