将字符串列表传递给 C# 中的存储过程
从 C# 调用 SQL Server 存储过程时,传递字符串列表作为参数可能具有挑战性。不过,在 SQL Server 2008 及更高版本中,有一个使用用户定义表类型 (UDTT) 功能的解决方案。
创建 UDTT
首先,创建一个 UDTT表示字符串列表:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
修改存储的过程
在存储过程中,将 UDTT 声明为参数:
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Just return the items we passed in SELECT l.Item FROM @list l; END
在 C# 中填充 UDTT
在 C# 中,创建一个DataTable并添加一个名为string类型的列"Item":
using System.Data; using System.Data.SqlClient; ... DataTable table = new DataTable(); table.Columns.Add("Item", typeof(string));
使用字符串列表填充 DataTable:
for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString());
创建一个 SqlParameter 以将 DataTable 作为 UDTT 传递:
SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;
将列表传递到存储过程
将 SqlParameter 添加到 SqlCommand 并执行存储过程:
using (SqlConnection con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { cmd.Parameters.Add(pList); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
此方法允许您以结构化格式将字符串列表传递给存储过程,启用复杂查询。
以上是如何从 C# 将字符串列表传递到 SQL Server 存储过程?的详细内容。更多信息请关注PHP中文网其他相关文章!