[英]Operand type clash: varchar is incompatible with varchar(50) trying to insert in encrypted database
[英]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.