從C# 將清單傳遞到SQL Server 預存程序
在給定的C# 程式碼中,正在使用各種參數值來呼叫儲存過程,包括字串列表。但是,預存程序中的查詢要求將清單作為 IN 子句的一部分傳遞。
解決方案:使用使用者定義的表格類型(SQL Server 2008)
SQL Server 2008 引入了使用者定義的表類型,該功能允許以結構化方式將資料集合傳遞到預存程序。以下是實作此解決方案的方法:
1.建立使用者定義的表格類型
建立與字串清單對應的表格類型。例如:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
2。修改預存程序
調整預存程序以接受表格類型為輸入參數:
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Query using the table type SELECT l.Item FROM @list l; END
3.C# 填表類型
在C# 中,建立一個DataTable 物件並使用字串清單填充它。然後,定義一個參數將 DataTable 傳遞給預存程序。
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table; cmd.Parameters.Add(pList); }
4.執行預存程序
使用填滿的 SqlParameter 物件執行預存程序。
範例用法:
using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
以上是如何將 C# 字串清單傳遞給 SQL Server 預存程序的 IN 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!