繁体   English   中英

操作数类型冲突:varchar 不兼容

[英]Operand type clash: varchar is incompatible

我创建了一个用户数据表类型,如下所示:

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); 

您只是将类型名称(作为字符串)传递给您的存储过程。 相反,您必须使用 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();

这篇文章准确地解释了你想做什么,请阅读这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM