0

大家好我在我的存储过程中定义了一个输出参数,我的sp如下

createproc [dbo].[convertempID](@empid int,@totcnt varchar(4) output)
as
begin
    select @totcnt = right('00000'+convert(varchar(6), empID), 4)
        from tblEmployee
        where empID = @empid;
end

当我执行这个时,我得到了结果0015@totcnt但是当我在我的 c# 代码中调用它时,我得到了15而不是0015有人能告诉我哪里出错了

cmd.CommandText = "convertempID";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@empid", 15);
cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));
cmd.Parameters["@totcnt"].Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
sring ans = cmd.Parameters["@totcnt"].Value.ToString();
4

4 回答 4

4

这就是问题:

cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));

将其与存储过程中的声明进行比较:

@totcnt varchar(4) output

将参数类型更改为SqlDbType.VarChar,它应该可以工作。目前该值实际上是整数15 而不是字符串“0015”。

于 2013-02-22T12:51:20.270 回答
1

您已指定参数类型 as和forInt之间没有区别。将参数行更改为:001515Int

cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.VarChar));
于 2013-02-22T12:51:44.150 回答
1

返回值类型必须与类型匹配:

尝试更换

 cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.Int));

 cmd.Parameters.Add(new SqlParameter("@totcnt", SqlDbType.VarChar));
于 2013-02-22T12:53:06.680 回答
0

将 totcnt 类型从 int 更改为 varchar

于 2013-02-22T12:56:45.170 回答