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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

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

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

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

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

在sp声明中,似乎没有声明表值参数可以为空。将空列表绑定到表值参数的正确方法是什么?

提问于
用户回答回答于

我对'不通过参数'声明意味着什么有点困惑。什么最终为Entity Framework ExecuteSqlCommandAsync()工作是这样的:

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

这会将参数作为“默认”传递。

用户回答回答于

诀窍是:不要传入参数。表值参数的默认值是一个空表。

扫码关注云+社区