C# 企业库中用户定义的SQL类型等效项

C# 企业库中用户定义的SQL类型等效项,c#,sql-server,stored-procedures,enterprise-library,user-defined-types,C#,Sql Server,Stored Procedures,Enterprise Library,User Defined Types,我正在尝试传递参数,该参数是SQL Server中的表类型。我找不到兼容的c#类型 我将多个参数传递给存储过程,其中一个参数是SQL中的用户定义类型 Database Connection = new SqlDatabase(ConnectionString); DbCommand Cmd= Connection.GetStoredProcCommand("ProcedureName"); .................. Connection.AddInParameter(Cmd, "@c

我正在尝试传递参数,该参数是SQL Server中的表类型。我找不到兼容的c#类型

我将多个参数传递给存储过程,其中一个参数是SQL中的用户定义类型

Database Connection = new SqlDatabase(ConnectionString);
DbCommand Cmd= Connection.GetStoredProcCommand("ProcedureName");
..................
Connection.AddInParameter(Cmd, "@custom", DbType.Object, custom);
存储过程如下所示:

ALTER过程[dbo]。[ProcedureName]
@自定义dbo.CstmType只读
作为
此代码引发以下错误:

传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数6(“@custom”):数据类型0x62(sql_变量)的类型对于特定于类型的元数据无效

我厌倦了在网上找到这个问题的答案。是否有人能提供有效的建议,说明如何克服此错误,以及适当的数据类型是什么?

在您的C代码中,使用您在用户定义表类型中添加的相同字段创建数据表。 比如,

然后,在这个表中插入数据,比如

dt.Rows.Add(new Object[]{ value1,value2 });
在过程调用中添加参数,如下所示

SqlCommand cmd = new SqlCommand("ProcedureName", con)
cmd.CommandType = CommandType.StoredProcedure;
var List = new SqlParameter("@custom", SqlDbType.Structured);
List.TypeName = "CstmType";
List.Value = dt;
cmd.Parameters.Add(List);
在存储过程中,为用户定义的表类型添加参数

@custom dbo.CstmType READONLY

dbo.CstmType的SQL定义是什么?您试图为@custom传递什么C值?所说的“用户定义类型”是指表类型(
CREATE type dbo.CstmType AS table…
),别名类型(
CREATE type dbo.CstmType FROM numeric(30,2)
),C#用户定义的数据类型,还是其他类型?请具体说明并提供定义。@AaronBertrand:是的。按用户定义的类型表示将类型dbo.CstmType创建为表…Enterpise库数据块在10多年前被放弃,因为它的功能成为ADO.NET本身的一部分。这就是为什么你再也找不到任何文档或答案了。正如Shivani所展示的,实际上使用ADO.NET更容易在任何情况下,Entlib都是在ADO.NET之上工作的,它不会取代它。在ADO.NET中使用表值参数的唯一方法是使用DataTable。这意味着
DbType.Object
是错误的。谢谢您的回复。“我也在尝试做同样的事情,但要使用企业图书馆。”@ManishDhariwal为什么?该数据块在10多年前被放弃,因为它的功能成为ADO.NET本身的一部分。您使用的是哪个版本的Entlib?@ManishDhariwal在任何情况下,Entlib都是在ADO.NET之上工作的,它不会取代它。要传递表值参数,必须使用DataTable。这意味着
DbType.Object
是错误的类型。
@custom dbo.CstmType READONLY