将空列表或空值绑定到存储过程(.net)上的表值参数
我创build了一个存储过程,该过程使用一个表值参数,该表是具有inttypes的单个列的表。 这个想法是简单地将一个id列表传入存储过程,并允许sp处理数据。 但是,在没有数据通过的情况下,我遇到了问题(当我有数据时,事情正常工作)。 我将List转换为IEnumerable,并将其绑定到sp的表值参数。 我试图绑定一个空列表,导致错误
System.ArgumentException:在SqlDataRecord枚举中没有logging。 要发送没有行的表值参数,请改用该值的空引用。
然后我试图绑定一个空值(我认为是上面的消息得到的),但只会导致一个不同的错误信息
System.NotSupportedException:不支持参数“@MainItemIdList”的DBNull值。 表值参数不能是DBNull。
在sp声明中,您似乎没有声明表值参数可以为空。 将空列表绑定到表值参数的正确方法是什么?
诀窍是: 不要传入参数 。 表值参数的默认值是一个空表。
这个exception消息是如此无用,真是遗憾。
我对“不通过参数”声明意味着什么感到困惑。 什么最终为entity frameworkExecuteSqlCommandAsync()工作是这样的:
new SqlParameter("yourParameterName", SqlDbType.Structured) { Direction = ParameterDirection.Input, TypeName = "yourUdtType", Value = null };
这将传递参数为“默认”。
当传递一个空的IEnumerable<int>
时候出现错误,但是当我传递一个空的List<int>
时候它工作正常。