[英]Operand type clash: int is incompatible with uniqueidentifier c# Dapper.Net
[英]Operand type clash: int is incompatible with uniqueidentifier
當我嘗試從C#代碼執行下面的存儲過程時,我得到一個SQLException“操作數類型沖突:int與uniqueidentifier不兼容”。
create proc sp_Get_Allfields_Account_Public
@username varchar(20),
@password varchar(20),
@acc_num UniqueIdentifier out,
@cust_name varchar(20) out,
@balance float out
as
select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where username=@username and password=@password
C#代碼如下
cmd = new SqlCommand("sp_Get_Allfields_Account_Public", con);
cmd.CommandType = CommandType.StoredProcedure;
// Add Input Parameters
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
// Add output parameters
cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier);
cmd.Parameters["@acc_num"].Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@cust_name", SqlDbType.VarChar);
cmd.Parameters["@cust_name"].Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@balance", SqlDbType.Float);
cmd.Parameters["@balance"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
表定義
create table Account_Public
(
acc_num uniqueidentifier,
cust_name varchar(20),
username varchar(20),
password varchar(20),
balance float
)
這是因為你正在調用AddWithValue
,然后將值作為枚舉傳遞(它被解釋為int
)。
cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier);
使用不同的方法(可能只是Add
)。
這可能看起來有點多余,但您確定列[Account_Public].[acc_num]
的數據類型實際上是uniqueidentifier
而不是int
嗎?
試試這個:
cmd = new SqlCommand("select @acc_num=acc_num,@cust_name=cust_name,@balance=balance from Account_Public where username=@username and password=@password", con);
cmd.CommandType = CommandType.Text;
具有相同的參數。 你得到同樣的錯誤嗎?
另外,我強烈建議您在所有char參數上指定顯式大小。 輸入參數並不重要,但對輸出參數非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.