我创建了一个用户数据表类型如下:
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);
答案 0 :(得分:2)
您只是将类型名称(作为字符串)传递给存储过程。 相反,您必须使用SqlParameter对象传递表实例。
这样的事情:
var connection = CMASConnectionProvider.Connection;
var command = new SqlCommand("dbo.test", connection);
command.CommandType = CommandType.StoredProcedure;
// Next 2 lines are the point:
var parameter = command.Parameters.AddWithValue("@tblPASpecs", dtbl);
parameter.SqlDbType = SqlDbType.Structured;
// Execute the command according your needs and existing helper classes
// var result = command.Execute();
本文准确说明了您想要做的事情,请read here