首页 >数据库 >mysql教程 >如何将 C# 字符串列表传递给 SQL Server 存储过程?

如何将 C# 字符串列表传递给 SQL Server 存储过程?

DDD
DDD原创
2025-01-13 09:22:431001浏览

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