【发布时间】:2015-07-29 12:16:24
【问题描述】:
我创建了一个用户数据表类型如下:
CREATE TYPE [dbo].[UDTPASpecMYTest] AS TABLE(
[EmpName] [varchar](max) NULL,
[Empaddress] [varchar](max) NOT NULL,
[EmpCarname] [varchar](max) NULL
)
GO
并声明如下过程:
CREATE procedure [dbo].[test]
(
@tblPASpecs UDTPASpecMYTest READONLY
)
AS
BEGIN
select 1
END
当我通过传递数据表从应用程序调用过程时,它显示错误:
“操作数类型冲突:nvarchar 与 UDTPASpecMYTest 不兼容”。
应用代码:
DataColumn workCol = dtbl.Columns.Add("EmpName", typeof(String));
dtbl.Columns.Add("Empaddress", typeof(String));
dtbl.Columns.Add("EmpCarname", typeof(String));
dtbl.Rows.Add("Test", "Test", "Test");
strQuery = "EXEC dbo.test @tblPASpecs=" + dtbl + "";
//call the procedure
CMASConnectionProvider.DMLService.ExecSqlReturnDataSet(strQuery);
【问题讨论】:
-
你必须将它作为参数传递,你不能在这里使用字符串连接。
-
...参数数据类型应为
SqlDbType.Structured -
要在 C# 中使用 SQL 用户类型,您必须告知其类型。如果您使用 ADO.Net 并且正在执行存储过程,则在定义参数时,您必须将类型指定为 SqlDbType.Structured 并且类型名称与您的类型名称一样,= "dbo.UDTPASpecMYTest";
-
这个question 展示了如何使用 ADO.Net。
标签: c# sql-server-2008