首頁 >資料庫 >mysql教程 >如何使用C#有效率地將參數化資料批次插入SQL Server?

如何使用C#有效率地將參數化資料批次插入SQL Server?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-12 07:31:47406瀏覽

How Can I Efficiently Bulk Insert Parameterized Data into SQL Server Using C#?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn