我收到一个SQLException“操作数类型冲突:int与uniqueidentifier不兼容” 当我尝试从C#代码执行以下存储过程时。
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
)
答案 0 :(得分:10)
这是因为你正在调用AddWithValue
,然后将值作为枚举(被解释为int
)传递。
cmd.Parameters.AddWithValue("@acc_num", SqlDbType.UniqueIdentifier);
使用其他方法(可能只是Add
)。
答案 1 :(得分:0)
这可能看起来有点多余,但您确定列[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参数上指定显式大小。它对输入参数并不重要,但对输出参数非常重要。