当前位置:编程学习 > C#/ASP.NET >>

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();



--------------------编程问答--------------------
引用
cmd.Parameters.Add("@result", SqlDbType.Int).Direction = ParameterDirection.Output;

引用
@result=CONVERT(nvarchar,@userId)+'|'+@subjectName

SqlDbType.Int这个类型和存储过程中不一致。应该改成SqlDbType.NVarChar。
你的存储过程中有一个分支返回的是字符串,这个是不能转成int的
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,