C#调用带输出参数存储过程时,输出值总是为空,请高手指点,在线等,急。。。。

存储过程:ALTERPROCEDURE[dbo].[twGetNo]@tbNmvarchar(50),@Novarchar(50)output,@lshdecimalou... 存储过程:
ALTER PROCEDURE [dbo].[twGetNo]
@tbNm varchar(50),
@No varchar(50)output,
@lsh decimal output,
@cd int output
AS
begin

select @No=bmNo,@lsh=lsh,@cd=cd from tw_BieMa where tbnm=@tbNm
update tw_Biema set lsh=lsh+1
end

C#中调用
public string GetNo(string tbNm,SqlConnection cn) {
string No = "";
try
{
cn.Open();
SqlCommand cmd = new SqlCommand("twGetNo", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@tbNm", SqlDbType.VarChar, 50).Value = tbNm;
cmd.Parameters.Add("@No", SqlDbType.VarChar, 50);
cmd.Parameters.Add("@lsh", SqlDbType.Decimal);
cmd.Parameters.Add("@cd", SqlDbType.Int);
cmd.Parameters["@tbNm"].Direction = ParameterDirection.Input;
cmd.Parameters["@No"].Direction = ParameterDirection.Output;
cmd.Parameters["@lsh"].Direction = ParameterDirection.Output;
cmd.Parameters["@cd"].Direction = ParameterDirection.Output;
//cmd.ExecuteScalar();
cmd.ExecuteNonQuery();
string bmNo = cmd.Parameters["@No"].Value.ToString();
Decimal lsh = (Decimal)cmd.Parameters["@lsh"].Value;
int cd = (int)cmd.Parameters["@cd"].Value;
string pp = lsh.ToString();
pp = string.Empty.PadLeft(6, '0');
MessageBox.Show(pp);
cn.Close();
}
catch (Exception ex) { cn.Close(); MessageBox.Show(ex.ToString()); }
return No;

}}

运行到string bmNo = cmd.Parameters["@No"].Value.ToString();此处时总是提示值为空,但在数据库中操作时是有数据输出的,请高手指点
展开
 我来答
merlindlut
2012-11-27 · TA获得超过422个赞
知道小有建树答主
回答量:945
采纳率:0%
帮助的人:409万
展开全部
楼主,这是提示你定义的cmd在这条语句执行之前已经执行cmd.ExecuteNonQuery();这条语句执行完之后。cmd变量就是Null了,因此你再调用cmd.Parameters,就会出现为空的错误,你改下这地方再试试!!!
追问
如何修改

//cmd.ExecuteScalar();
cmd.ExecuteNonQuery();
第一个已经被屏弊了,没有执行
追答
你可以在string bmNo = cmd.Parameters["@No"].Value.ToString();语句之前再new一个cmd对象啊,应该就能解决问题,不过效率会有点小影响
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式