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();此处时总是提示值为空,但在数据库中操作时是有数据输出的,请高手指点 展开
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();此处时总是提示值为空,但在数据库中操作时是有数据输出的,请高手指点 展开
1个回答
展开全部
楼主,这是提示你定义的cmd在这条语句执行之前已经执行cmd.ExecuteNonQuery();这条语句执行完之后。cmd变量就是Null了,因此你再调用cmd.Parameters,就会出现为空的错误,你改下这地方再试试!!!
追问
如何修改
//cmd.ExecuteScalar();
cmd.ExecuteNonQuery();
第一个已经被屏弊了,没有执行
追答
你可以在string bmNo = cmd.Parameters["@No"].Value.ToString();语句之前再new一个cmd对象啊,应该就能解决问题,不过效率会有点小影响
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询