在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中文网其他相关文章!