Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作数类型冲突:varchar不兼容_C#_Sql Server 2008 - Fatal编程技术网

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

C# 操作数类型冲突:varchar不兼容,c#,sql-server-2008,C#,Sql Server 2008,我创建了一个用户数据表类型,如下所示: 将类型[dbo].[UDTPASpecMYTest]创建为表 [EmpName][varchar]最大空值, [Empaddress][varchar]最大值不为空, [EmpCarname][varchar]最大空值 去 并声明如下程序: 创建过程[dbo]。[test] @tblPASpecs UDTPASpectMyTest只读 像 开始 选择1 终止 当我通过传递数据表从应用程序调用过程时,它显示了一个错误: 操作数类型冲突:nvarchar与UD

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

将类型[dbo].[UDTPASpecMYTest]创建为表 [EmpName][varchar]最大空值, [Empaddress][varchar]最大值不为空, [EmpCarname][varchar]最大空值 去 并声明如下程序:

创建过程[dbo]。[test] @tblPASpecs UDTPASpectMyTest只读 像 开始 选择1 终止 当我通过传递数据表从应用程序调用过程时,它显示了一个错误:

操作数类型冲突:nvarchar与UDTPASpecMYTest不兼容

应用程序中的代码:

DataColumn workCol=dtbl.Columns.AddEmpName,typeofString; dtbl.Columns.AddemAddress,字符串类型; dtbl.Columns.ADDEMPCANAME,字符串类型; dtbl.Rows.AddTest,Test,Test; strQuery=EXEC dbo.test@tblPASpecs=+dtbl+; //调用程序 CMASConnectionProvider.DMLService.ExecSqlReturnDataSetstrQuery;
您只将类型名作为字符串传递给存储过程。 相反,您必须使用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();

这篇文章准确地解释了您想要做什么,请

您必须将其作为参数传递,您不能在这里使用字符串连接…参数数据类型应该是SqlDbType.StructuredThis应该帮助您:要在C中使用SQL用户类型,您必须通知其类型。如果您正在使用ADO.Net并正在执行存储过程,则在定义参数时,必须将类型指定为SqlDbType.Structured,并将类型名指定为类型名=dbo.UDTPASpecMYTest;这显示了如何使用ADO.Net进行操作。您确实应该在答案中包含链接的相关部分,以防止链接失效的可能性。