我在存储过程中把执行结果付给了@ReturnVal参数,然后想在.net中获得该返回值
但是出现:“过程 'CXYH' 需要参数 '@ReturnVal',但未提供该参数。“这样的错误
不知道怎么回事,我已经把该参数设为输出了,怎么还要提供该值呢?!!
存储过程部分:
ALTER PROCEDURE CXYH(
@USER_NUM VARCHAR(20),
@FALG VARCHAR(10),
@ReturnVal VARCHAR(100) OUTPUT
) IF @FALG = 'MF'
IF NOT EXISTS (SELECT * FROM FREE_NUM WHERE USER_NUM = @USER_NUM)
BEGIN
INSERT INTO FREE_NUM(USER_NUM,WAY)
VALUES(@USER_NUM,@HOST_NAME)
SELECT @ReturnVal = '免费用户添加成功!'
INSERT INTO OP(操作类型,执行对象,操作方)
VALUES('免费用户',@user_num,@HOST_NAME)
END
ELSE
SELECT @ReturnVal = '此用户已为免费用户!'我在.net中的调用存储过程的代码:
Application["strconn"]="Server=localhost;database=sms;uid=sa;pwd=123";
SqlConnection myconn=new SqlConnection(Application["strconn"].ToString());
myconn.Open();
SqlCommand m_objCmd = new SqlCommand("CXYH", myconn);
m_objCmd.CommandText = "CXYH";
m_objCmd.CommandType = CommandType.StoredProcedure;
m_objCmd.Parameters.Add(new SqlParameter("@USER_NUM",SqlDbType.VarChar,20)).Value = TextBox1.Text;
m_objCmd.Parameters.Add(new SqlParameter("@FALG",SqlDbType.VarChar,10)).Value=RadioButtonList1.SelectedValue;
m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.ReturnValue;
m_objCmd.ExecuteNonQuery();//执行存储过程
myconn.Close();
大家帮忙看看,多谢拉!
但是出现:“过程 'CXYH' 需要参数 '@ReturnVal',但未提供该参数。“这样的错误
不知道怎么回事,我已经把该参数设为输出了,怎么还要提供该值呢?!!
存储过程部分:
ALTER PROCEDURE CXYH(
@USER_NUM VARCHAR(20),
@FALG VARCHAR(10),
@ReturnVal VARCHAR(100) OUTPUT
) IF @FALG = 'MF'
IF NOT EXISTS (SELECT * FROM FREE_NUM WHERE USER_NUM = @USER_NUM)
BEGIN
INSERT INTO FREE_NUM(USER_NUM,WAY)
VALUES(@USER_NUM,@HOST_NAME)
SELECT @ReturnVal = '免费用户添加成功!'
INSERT INTO OP(操作类型,执行对象,操作方)
VALUES('免费用户',@user_num,@HOST_NAME)
END
ELSE
SELECT @ReturnVal = '此用户已为免费用户!'我在.net中的调用存储过程的代码:
Application["strconn"]="Server=localhost;database=sms;uid=sa;pwd=123";
SqlConnection myconn=new SqlConnection(Application["strconn"].ToString());
myconn.Open();
SqlCommand m_objCmd = new SqlCommand("CXYH", myconn);
m_objCmd.CommandText = "CXYH";
m_objCmd.CommandType = CommandType.StoredProcedure;
m_objCmd.Parameters.Add(new SqlParameter("@USER_NUM",SqlDbType.VarChar,20)).Value = TextBox1.Text;
m_objCmd.Parameters.Add(new SqlParameter("@FALG",SqlDbType.VarChar,10)).Value=RadioButtonList1.SelectedValue;
m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.ReturnValue;
m_objCmd.ExecuteNonQuery();//执行存储过程
myconn.Close();
大家帮忙看看,多谢拉!
解决方案 »
- ClientScript.RegisterStartupScript 和RegisterStartupScript 有啥区别啊
- 关于DropDownList 赋值
- Gridview 绑定 SqlDataSource 显示数据!可以显示数据,但不能更新?
- MessageQueue在机器重启后..消息就没有拉?
- 有如下使用要求的全局变量如何实现?
- 怎么样在页面前台获得DataGriD中自定义控件TextBox的ID或在后台找到INPUT TYPE="BUTTON"这控件
- 支持http://community.csdn.net/Expert/topic/3773/3773574.xml?temp=.5447962楼主,散100分
- RDLC打印问题(winform)
- out of scope?
- 准备学习Asp.net,请各位指教!
- 学习asp.net之前的问题,帮忙一下.
- 问一个留言板的问题
请你注意ParameterDirection.ReturnValue是指数据库的函数的返回,
类似于 int function()返回int,而你调用的是是类似 void function( ref int)
m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.OutPut;
^^^^^^^
(2)第二种解决方法
如果你想要用返回值的话,那就应该将参数的名字命名为 @ReturnValue,这是固定格式,并且存储过程中也应该有类似的返回值If ....
Return 0
Else
return 1而不需要命名一个参数
“ 未将对象引用设置到对象的实例。“
是不是没有获得存储过程中的“SELECT @ReturnVal = '此用户已为免费用户!'”的值呀!
有人帮忙看看么?在线等待!
取出的值先进行非空判断,要不然是不可以直接ToString()
写在那里了?一定要写在m_objCmd.ExecuteNonQuery();之后