我想写个存储过程来验证用户的登陆,在界面层会传两个参数 user ,password 代码是这样的:
DataBase db = new DataBase();//连接数据库
                
                    SqlParameter[] parameters ={
                        db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
                        db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
                                       
                    };
                    db.RunProc("login", parameters);//调用存储过程我的存储过程代码:
CREATE   procedure login
@userid varchar(50),
@userpassword varchar(50),
@value int output
asselect @value=count(*) from users where userid=@userid and userpassword=@userpassword
GO代码是自己写的,见笑了,我想如果成功的话,就会返回一个值给@value,但是这个值怎么得到成问题了.大家帮帮忙了
               
                   

解决方案 »

  1.   

    SqlParameter.Direction 属性
     
    获取或设置一个值,该值指示参数是只可输入、只可输出、双向还是存储过程返回值参数。ParameterDirection 值之一。默认值为 Input。 Input 参数是输入参数。 
     Output 参数是输出参数。 
     InputOutput 参数既能输入,也能输出。 
     ReturnValue 参数表示诸如存储过程、内置函数或用户定义函数之类的操作的返回值。 
      

  2.   

    DataBase db = new DataBase();//连接数据库
                    
                        SqlParameter[] parameters ={
                            db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名
                            db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码
                            db.MakeOutParam("@value",SqlDbType.int,4),textbox2里面是密码
                                           
                        };
                        db.RunProc("login", parameters);//调用存储过程
    db应该有个获取参数值的方法。
      

  3.   

    db.AddOutParameter("NewsId", DbType.Int32, 1);

    int NewsId = (int)db.GetParameterValue("NewsId");

    return NewsId;
      

  4.   

    不能RETURN?..
     在再程序里接收.
      

  5.   

    我这个类里面还有好多方法不会用,那个执行存储过程的方法,它的返回值是void的。我把代码给你们看看#region 生成存储过程参数MakeParam(string ParamName , SqlDbType DbType , Int32 Size , ParameterDirection Direction , object Value)
    /// <summary>
    /// 生成存储过程参数
    /// </summary>
    /// <param name="ParamName">参数名</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <param name="Direction">参数方向</param>
    /// <param name="Value">参数值</param>
    /// <returns>新的 parameter 对象</returns>
    public SqlParameter MakeParam(string ParamName , SqlDbType DbType , Int32 Size , ParameterDirection Direction , object Value)
    {
    SqlParameter param; if(Size > 0)
    param = new SqlParameter(ParamName ,DbType ,Size);
    else
    param = new SqlParameter(ParamName ,DbType); param.Direction = Direction;

    if(Direction == ParameterDirection.Input)
    param.Value = Value;

    return param;
    }
    #endregion #region 传入输入参数MakeInParam(string ParamName , SqlDbType DbType , int Size , object Value)
    /// <summary>
    /// 传入输入参数
    /// </summary>
    /// <param name="ParamName">参数名</param>
    /// <param name="DbType">参数类型</param></param>
    /// <param name="Size">参数大小</param>
    /// <param name="Value">参数值</param>
    /// <returns>新的 parameter 对象</returns>
    public SqlParameter MakeInParam(string ParamName , SqlDbType DbType , int Size , object Value)
    {
    return MakeParam(ParamName ,DbType ,Size ,ParameterDirection.Input ,Value);
    }
    #endregion #region 传入输出参数MakeOutParam(string ParamName, SqlDbType DbType, int Size) 
    /// <summary>
    /// 传入输出参数
    /// </summary>
    /// <param name="ParamName">参数名/param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <returns>新的 parameter 对象</returns>
    public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) 
    {
    return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
    }
    #endregion #region 返回参数值MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
    /// <summary>
    /// 返回参数值
    /// </summary>
    /// <param name="ParamName">参数名</param>
    /// <param name="DbType">参数类型</param>
    /// <param name="Size">参数大小</param>
    /// <returns>新的 parameter 对象</returns>
    public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size) 
    {
    //不懂ParameterDirection.ReturnValue, 不知道能return些什么:(
    return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
    }
    #endregion
    ----------这是执行存储过程的代码
    #region 执行存储过程RunProc(string procName ,SqlParameter[] prams)
    /// <summary>
    /// 执行存储过程
    /// </summary>
    /// <param name="procName">存储过程名称</param>
    /// <param name="prams">存储过程所需参数</param>
    /// <returns>返回存储过程返回值</returns>
    public void RunProc(string procName ,SqlParameter[] prams) 
    {
    SqlCommand cmd = CreateCommand(procName, prams);
    Open();
    cmd.ExecuteNonQuery();
    Close();
    //return cmd.Parameters["ReturnValue"].Value;
    }
    #endregion#region 创建一个SqlCommand对象CreateCommand(string procName ,SqlParameter[] prams)
    /// <summary>
    /// 创建一个SqlCommand对象以此来执行存储过程
    /// </summary>
    /// <param name="procName">存储过程的名称</param>
    /// <param name="pramsIn">存储过程所需输入参数</param>
    /// <returns>返回SqlCommand对象</returns>
    private SqlCommand CreateCommand(string procName ,SqlParameter[] prams)
    {
    SqlCommand cmd = new SqlCommand(procName , conn);
    cmd.CommandType = CommandType.StoredProcedure; if(prams != null)
    {
    foreach(SqlParameter parameter in prams)
    {
    cmd.Parameters.Add(parameter);
    }
    }
    // 加入返回参数
    /*cmd.Parameters.Add(
    new SqlParameter("ReturnValue", SqlDbType.NVarChar, 50,
    ParameterDirection.ReturnValue, false, 0, 0,
    string.Empty, DataRowVersion.Default, null));*/
    return cmd;
    }
    #endregion
      

  6.   

    我一般是不用返回参数的,直接看查询的结果集的数,
    if(Table[0].Rows.count >0)
    {
     登陆成功;
    }
      

  7.   

        //不懂ParameterDirection.ReturnValue, 不知道能return些什么:(
                return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
            }    
    return MakeParam方法里的返回值  return param;ParameterDirection 应该是个枚举 
      

  8.   

    DataBase db = new DataBase();//连接数据库 
                    
                        SqlParameter[] parameters ={ 
                            db.MakeInParam("@userid",SqlDbType.VarChar,50,textBox1.Text),//textbox1里面是用户名 
                            db.MakeInParam("@userpassword",SqlDbType.VarChar,50,textBox2.Text),textbox2里面是密码 
                            db.MakeOutParam("@value",SqlDbType.int)                                      
                        }; 
                        db.RunProc("login", parameters);//调用存储过程 
    parameters[3].value应该就可以取值吧
    我没有测试,以前也没有这么用过参数
    一般都是先定义一个输出的参数
      

  9.   

    http://blog.csdn.net/wwlearn/archive/2008/05/23/2474525.aspx