我正在尝试使用C#和SQL Server 2008的用户定义数据类型,但是当执行command.ExecuteReader()时我引发了异常.
string qyery = "SELECT * FROM Product WHERE IsAvailableProduct < @Param";
SqlCommand command = new SqlCommand(qyery, conn);
SqlParameter param = new SqlParameter("@Param", SqlDbType.Structured);
param.UdtTypeName = "MyBolean";
param.SqlDbType = SqlDbType.Structured;
param.Value = 1;
command.Parameters.Add(param);
SqlDataReader reader = command.ExecuteReader();
引发的例外是:
Failed to convert parameter value from a Int32 to a IEnumerable``1.
我的代码有什么问题?
编辑:
如果我将SqlDbType更改为Udt,则会出现以下异常:指定的类型未在目标服务器上注册.System.Int32,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089.
如果我将DbType属性设置为Int(它是“MyBolean”的基本类型),则结果是异常无法将参数值从Int32转换为IEnumerable1 .`.
编辑:
我修改了标题,因为在SQL Server 2008中,它是“用户定义数据类型”而没有“用户定义的类型”
最佳答案
SqlDbType
枚举值Structured用于表示您正在传递
Table Value Parameter,这就是为什么您收到的错误消息,因为您传入的值是整数,而不是“某事物列表” “用作TVP.
您需要根据MyBolean的基础数据类型设置param.SqlDbType,我怀疑它可能是Bit或Int.