在C#中將清單傳遞給SQL Server預存程序
問題:
您需要將C#程式碼中的字串清單傳遞給SQL Server預存程序。但是,此清單是動態的,包含數百個項目。
解:
使用使用者定義表類型 (UDTT)
SQL Server 2008及更高版本提供使用者定義表類型 (UDTT),讓您建立自訂資料類型以在預存程序中使用。請依照以下步驟操作:
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );</code>
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END</code>
<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>
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;</code>
<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中文網其他相關文章!