加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 使用Dapper.TVP TableValueParameter与其他参数

发布时间:2020-12-12 16:33:55 所属栏目:MsSql教程 来源:网络整理
导读:我有一个过程,其中包含一个表值参数,以及其他参数: CREATE PROCEDURE [dbo].[Update_Records] @currentYear INT,@country INT,@records Record_Table_Type READONLYAS 我试图用Dapper.TVP来称呼它. 以下是我到目前为止的代码: var recordsParameter = new L
我有一个过程,其中包含一个表值参数,以及其他参数:
CREATE PROCEDURE [dbo].[Update_Records]
    @currentYear INT,@country INT,@records Record_Table_Type READONLY
AS

我试图用Dapper.TVP来称呼它.

以下是我到目前为止的代码:

var recordsParameter = new List<SqlDataRecord>();

        // This metadata matches 'Record_Table_Type' in the Database
        var recordsMetaData = new[]
        {
            new SqlMetaData("OriginalValue",SqlDbType.Decimal,19,4),new SqlMetaData("NewValue",new SqlMetaData("NewPercent",7,2),};

        foreach (var r in records)
        {
            var record = new SqlDataRecord(recordsMetaData);
            record.SetDecimal(0,r.OriginalValue);
            record.SetDecimal(1,r.NewValue);
            record.SetDecimal(2,r.NewPercent);
            recordsParameter.Add(record);
        }

        var spParams = new DynamicParameters(new
        {
            currentYear = filter.currentYear,country = filter.country,});

        var recordsParam = new TableValueParameter("@records","Record_Table_Type",recordsParameter);

        using (var connection = ConnectionFactory.GetConnection())
        {
            connection.Execute("Update_Records",???,commandType: CommandType.StoredProcedure);
        }

我的问题是如何将两组参数传递给调用Dapper Execute()的过程?

我努力了:

var spParams = new DynamicParameters(new
{
    currentYear = filter.currentYear,records = new TableValueParameter("@records",recordsParameter);
});

connection.Execute("Update_Records",spParams,commandType: CommandType.StoredProcedure);

connection.Execute("Update_Records",new Object[] { spParams,recordsParam },commandType: CommandType.StoredProcedure);

两个调用过程,但传递一个空表参数(SELECT COUNT(*)FROM @records returns 0)

我似乎找不到Dapper.TVP的任何实际的文档或源代码,所以整个事情是非常混乱的,而.Execute()的第二个参数只是一个动态的,所以再也不会告诉我我能做什么不能传递给它.

有任何想法吗?

解决方法

我在手机上可能会误会这个问题,但这应该是:
DataTable records = ...
connection.Execute("Update_Records",new {
        currentYear = filter.currentYear,records
    },commandType: CommandType.StoredProcedure
);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读