首頁 >資料庫 >mysql教程 >如何將 C# 字串清單傳遞給 SQL Server 預存程序?

如何將 C# 字串清單傳遞給 SQL Server 預存程序?

DDD
DDD原創
2025-01-13 09:22:43999瀏覽

How to Pass a C# String List to a SQL Server Stored Procedure?

在C#中將清單傳遞給SQL Server預存程序

問題:

您需要將C#程式碼中的字串清單傳遞給SQL Server預存程序。但是,此清單是動態的,包含數百個項目。

解:

使用使用者定義表類型 (UDTT)

SQL Server 2008及更高版本提供使用者定義表類型 (UDTT),讓您建立自訂資料類型以在預存程序中使用。請依照以下步驟操作:

  1. 建立UDTT: 使用類似如下的SQL語句建立一個新的UDTT:
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>
  1. 修改預存程序: 修改預存程序以接收UDTT為參數:
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>
  1. 在C#中填入DataTable: 建立一個DataTable來儲存字串清單:
<code class="language-csharp">using (var table = new DataTable())
{
    table.Columns.Add("Item", typeof(string));

    for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目
    {
        table.Rows.Add("Item " + i);
    }
}</code>
  1. 建立SqlParameter: 使用UDTT類型建立一個新的SqlParameter:
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured);
pList.TypeName = "dbo.StringList";
pList.Value = table;</code>
  1. 執行預存程序: 執行預存程序並擷取結果:
<code class="language-csharp">using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        cmd.Parameters.Add(pList);

        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
                Console.WriteLine(dr["Item"].ToString());
        }
    }
}</code>

請記得將connstring替換為您自己的連接字串。 此程式碼範例假設您的清單包含1000個項目,您需要根據實際清單大小調整循環。 此外,確保您的SQL Server執行個體已啟用READONLY參數的使用。

以上是如何將 C# 字串清單傳遞給 SQL Server 預存程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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