首页 > 后端开发 > C++ > 如何从 C# 将字符串列表传递到 SQL Server 存储过程?

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

Susan Sarandon
发布: 2025-01-05 00:53:40
原创
313 人浏览过

How to Pass a List of Strings to a SQL Server Stored Procedure from C#?

将字符串列表传递给 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中文网其他相关文章!

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