首页 文章

将空列表或空值绑定到存储过程(.net)上的表值参数

提问于
浏览
56

我创建了一个存储过程,它接受一个表值参数,该参数是一个具有int类型的单个列的表 . 我们的想法是简单地将一个id列表传递给存储过程,并允许sp使用数据 . 但是,在没有数据传入的情况下,我遇到了问题(当我有数据时,事情正常工作) . 我正在将List转换为IEnumerable,并将其绑定到sp的表值参数 . 我试图绑定一个空List,导致错误

System.ArgumentException:SqlDataRecord枚举中没有记录 . 要发送没有行的表值参数,请使用值的空引用 .

然后我尝试绑定一个空值(我认为这是上面的消息得到的),但这只会导致一个不同的错误消息

System.NotSupportedException:不支持参数'@MainItemIdList'的DBNull值 . 表值参数不能是DBNull .

您似乎不能在sp声明中将表值参数声明为可为空 . 将空列表绑定到表值参数的正确方法是什么?

3 回答

  • 0

    诀窍是: don’t pass in the parameter at all . 表值参数的默认值是空表 .

    很遗憾,异常消息是如此无益 .

  • 80

    我对'不通过参数'语句意味着什么感到困惑 . 最终为Entity Framework ExecuteSqlCommandAsync()工作的是:

    new SqlParameter("yourParameterName", SqlDbType.Structured)
      {
          Direction = ParameterDirection.Input,
          TypeName = "yourUdtType",
          Value = null
      };
    

    这会将参数作为'default'传递 .

  • 2

    传递空 IEnumerable<int> 时我收到错误但是当我传递空的 List<int> 时它工作正常 .

相关问题