我在存储过程中把执行结果付给了@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();
大家帮忙看看,多谢拉!

解决方案 »

  1.   

    m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.OutPut;
    请你注意ParameterDirection.ReturnValue是指数据库的函数的返回,
    类似于 int function()返回int,而你调用的是是类似 void function( ref int)
      

  2.   

    (1)第一种解决方法
    m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.OutPut;
                                       ^^^^^^^
    (2)第二种解决方法
    如果你想要用返回值的话,那就应该将参数的名字命名为 @ReturnValue,这是固定格式,并且存储过程中也应该有类似的返回值If ....
        Return 0
    Else
        return 1而不需要命名一个参数
      

  3.   

    改过拉可是又出现错误:(这句话:string strValue = m_objCmd.Parameters["@ReturnVal"].Value.ToString();//获得返回值)
                         “ 未将对象引用设置到对象的实例。“
    是不是没有获得存储过程中的“SELECT @ReturnVal = '此用户已为免费用户!'”的值呀!
    有人帮忙看看么?在线等待!
      

  4.   

    if(DBNull.Value == m_objCmd.Parameters["@ReturnVal"].Value)
    取出的值先进行非空判断,要不然是不可以直接ToString()
      

  5.   

    m_objCmd.Parameters.Add(new SqlParameter("@ReturnVal",SqlDbType.VarChar, 100)).Direction=ParameterDirection.OutPut;
      

  6.   

    (这句话:string strValue = m_objCmd.Parameters["@ReturnVal"].Value.ToString();//获得返回值)
    写在那里了?一定要写在m_objCmd.ExecuteNonQuery();之后