为了账号安全,请及时绑定邮箱和手机立即绑定

如何将表值参数从.NET代码传递给存储过程

如何将表值参数从.NET代码传递给存储过程

繁星coding 2019-06-17 17:11:40
如何将表值参数从.NET代码传递给存储过程我有一个MSSQLServer 2005数据库。在一些过程中,我将表参数作为nvarchar(用逗号分隔)传递给存储的proc,并在内部划分为单个值。我将它添加到SQL命令参数列表中,如下所示:cmd.Parameters.Add("@Logins", SqlDbType.NVarchar).Value = "jim18,jenny1975,cosmo";我必须将数据库迁移到SQLServer 2008。我知道有表值参数,我知道如何在存储过程中使用这些参数。但我不知道如何在SQL命令中将一个参数列表传递给参数列表。是否有人知道Parameters.Add程序?或者还有其他方式传递这个参数?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

至于Ryan的答案,您还需要设置DataColumnOrdinal属性,如果您处理的是table-valued parameter带着倍数序数为按字母顺序排列。

例如,如果有以下表值,则在SQL中用作参数:

CREATE TYPE NodeFilter AS TABLE (
  ID int not null
  Code nvarchar(10) not null,);

您需要在C#中按这样的顺序排列:

table.Columns["ID"].SetOrdinal(0);// this also bumps Code to ordinal of 1// if you have more than 2 cols then you would need to set more ordinals

如果您不能这样做,您将得到一个解析错误,未能将nvarchar转换为int。


查看完整回答
反对 回复 2019-06-17
?
手掌心

TA贡献1942条经验 获得超3个赞

属属

   public static DataTable ToTableValuedParameter<T, TProperty>(this IEnumerable<T> list, Func<T, TProperty> selector)
    {
        var tbl = new DataTable();
        tbl.Columns.Add("Id", typeof(T));

        foreach (var item in list)
        {
            tbl.Rows.Add(selector.Invoke(item));

        }

        return tbl;

    }


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 730 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信