无法将User-Defined-Data Type参数添加到我的查询中

Flo*_*ian 5 c# sql user-defined-types sql-server-2008

我正在尝试将用户定义的数据类型用于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();
Run Code Online (Sandbox Code Playgroud)

引发的异常是:

Failed to convert parameter value from a Int32 to a IEnumerable``1.

我的代码有什么问题?

编辑

如果将SqlDbType更改为Udt则会出现以下异常:Specified type is not registered on the target server.System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.

如果我将DbType属性设置为Int(这是“ MyBolean”的基本类型),结果将是例外1 Failed to convert parameter value from a Int32 to a IEnumerable..”。

编辑

我修改了标题,因为在SQL Server 2008中,它是“用户定义数据类型”,而没有“用户定义类型”

Rob*_*Rob 2

枚举SqlDbTypeStructured用于指示您正在传递Table Value Parameter,这就是您收到错误消息的原因,因为您传入的值是一个整数,而不是“某些内容的列表” ” 用作 TVP。

您需要param.SqlDbType根据MyBolean我怀疑可能是Bitor 的基础数据类型进行设置Int