使用 C# 最佳化 SQL Server 中的批次資料插入
處理大型資料集通常需要高效率的資料庫插入技術。 在處理網路資料時,參數化查詢對於安全性和效能至關重要。本文示範了一種優於常見、低效率的逐行方法的方法。
解低效率的單行插入
使用單一 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>
與單獨的 INSERT
語句相比,這種方法利用 TVP 來實現更快、更安全的批次資料插入。 AddWithValue
的使用簡化了參數處理。 請記得將 "ConnectionString"
替換為您的實際連接字串。
以上是如何使用C#有效率地將參數化資料批次插入SQL Server?的詳細內容。更多資訊請關注PHP中文網其他相關文章!