C# 无法将用户定义的数据类型参数添加到我的查询中

C# 无法将用户定义的数据类型参数添加到我的查询中,c#,sql,sql-server-2008,user-defined-types,C#,Sql,Sql Server 2008,User Defined Types,我试图在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", SqlDbTy

我试图在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();
引发的异常是:

无法将参数值从Int32转换为IEnumerable``1

我的代码出了什么问题

编辑:

如果我将SqlDbType更改为Udt,则会出现以下异常:指定的类型未在目标服务器上注册。System.Int32,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089

如果我将DbType属性设置为Int,这是MyBolean的基本类型,结果是异常无法将参数值从Int32转换为IEnumerable1。也会引发`

编辑:

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

结构化的枚举值用于指示传递的是,这就是为什么会收到错误消息,因为传递的值是一个整数,而不是用作TVP的对象列表


您需要根据MyBolean的底层数据类型设置param.SqlDbType,我怀疑它可能是Bit或Int。

乍一看,我想您至少需要使SqlDbType=Udt不被构造

如果使用UdtTypeName=MyBoolean 您的系统中必须存在此类型 数据库 如果你设置 SqlDbType=SqlDbType.Structured您的 类型MyBoolean必须为 表值参数和
因此,当您设置这些属性时,参数值必须至少为Implemente IEnumerable,即对象列表,但您提供了整数值,这导致了错误

我的数据库中有用户定义的表类型,假设这是MyTableTypeList。这些在我的存储过程中用作参数。 要通过此数据类型传递值,请执行以下操作:

声明一个类似于我的用户定义表类型的DataTable,并在其中填充值

将SqlParameter属性SqlDbType指定为SqlDbType.Structured param.SqlDbType=SqlDbType.Structured


使用用户定义的表类型的名称分配TypeName属性。param.TypeName=MyTableTypeList

我建议您在问题中添加UDT的定义=