首頁 >資料庫 >mysql教程 >如何在 C# 中使用表值參數高效插入帶有參數化變數的多行?

如何在 C# 中使用表值參數高效插入帶有參數化變數的多行?

Barbara Streisand
Barbara Streisand原創
2025-01-12 06:02:44309瀏覽

How to Efficiently Insert Multiple Rows with Parameterized Variables in C# Using Table-Valued Parameters?

利用表值參數在 C# 中進行批次資料插入

本指南示範如何使用 C# 中的單一參數化查詢有效地將多行插入 SQL Server 資料庫(2008 或更高版本)。 這種技術採用表值參數,顯著提高了單一插入語句的效能。

定義使用者定義表格類型

首先在 SQL Server 中建立使用者定義的表格類型來表示插入的資料結構:

<code class="language-sql">CREATE TYPE MyTableType AS TABLE
(
    Col1 int,
    Col2 varchar(20) 
)
GO</code>

預存程序建立

接下來,建立一個接受此使用者定義的表格類型作為參數的預存程序:

<code class="language-sql">CREATE PROCEDURE MyProcedure
(
    @MyTable dbo.MyTableType READONLY -- READONLY is crucial for table-valued parameters
)
AS
BEGIN
    INSERT INTO MyTable (Col1, Col2)
    SELECT Col1, Col2 
    FROM @MyTable;
END;
GO</code>

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...  For example:
DataRow row1 = dt.NewRow();
row1["Col1"] = 1;
row1["Col2"] = "Value 1";
dt.Rows.Add(row1);

// ...add more rows as needed...</code>

最後,使用 SqlCommand 執行預存程序:

<code class="language-csharp">using (SqlConnection con = new SqlConnection("YourConnectionString"))
{
    using (SqlCommand cmd = new SqlCommand("MyProcedure", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@MyTable", dt); //AddWithValue handles SqlDbType automatically
        con.Open();
        cmd.ExecuteNonQuery();
    }
}</code>

此方法提供了一種高效的方法來插入具有參數化值的多行,與單一 INSERT 語句相比,可以防止 SQL 注入漏洞並提高資料庫效能。 請記得將 "YourConnectionString" 替換為您的實際連接字串。

以上是如何在 C# 中使用表值參數高效插入帶有參數化變數的多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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