SqlException异常请各位大大们帮忙解决下
调试了半天实在搞不清楚到底是哪里出了问题 请各位大大们帮忙解决下 小弟万分感谢 上代码【存储过程】
ALTER proc usp_selectUserScore
@uid nvarchar(13),
@result nvarchar(30) output
AS
BEGIN
declare @isWatch int,@userId int,@pid int,@count int
select @isWatch=subjectId,@userId=id,@pid=professional_Id from Users where uId=@uid
if(@@rowcount=1)
begin
if(@isWatch=0)
begin
declare @subjectName nvarchar(30)=''
select @subjectName+=CONVERT(nvarchar,id)+'|' from Subject where p_Id=@pid
set @result=CONVERT(nvarchar,@userId)+'|'+@subjectName
end
else
begin
set @result='1'
end
end
else
begin
set @result='-1'
end
select * from Users where uId=@uid
return @@rowcount
END
以上代码用EXEC命令没有问题
*******************************************************************************
【c#调用代码】
string res = string.Empty;
string connStr = "Data Source=.;Initial Catalog=MySchool;Integrated Security=True";
using (SqlConnection conn = new SqlConnection(connStr))
{
SqlCommand cmd = new SqlCommand("usp_selectUserScore", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@uid", uid);
cmd.Parameters.Add("@result", SqlDbType.Int).Direction = ParameterDirection.Output;
try
{
conn.Open();
cmd.ExecuteNonQuery();
res = cmd.Parameters["@result"].Value.ToString();
}
catch (Exception)
{
res = "-2";
}
}
*********************************************************************************
错误是在cmd.ExecuteNonQuery();
错误信息:是从数据类型 nvarchar 转换为 int 时出错。
--------------------编程问答-------------------- cmd.Parameters.AddWithValue("@uid", uid);
cmd.Parameters.Add("@result", SqlDbType.Int).Direction = ParameterDirection.Output;
改为:
cmd.Parameters.Add("@uid", SqlDbType.Int).Value=uid;
cmd.Parameters.Add("@result", SqlDbType.Int).Value = ParameterDirection.Output;
cmd.ExecuteNonQuery();
res = cmd.Parameters["@result"].Value.ToString();
改为:
cmd.ExecuteScalar();
res = cmd.Parameters[0].Value.ToString();
--------------------编程问答--------------------
SqlDbType.Int这个类型和存储过程中不一致。应该改成SqlDbType.NVarChar。
你的存储过程中有一个分支返回的是字符串,这个是不能转成int的
补充:.NET技术 , C#