首页 > 后端开发 > C++ > 如何将 C# 字符串列表传递给 SQL Server 存储过程的 IN 子句?

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

Patricia Arquette
发布: 2025-01-04 15:55:39
原创
458 人浏览过

How to Pass a C# String List to an SQL Server Stored Procedure's IN Clause?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板