繁体   English   中英

无法从存储过程获取返回值

[英]Cannot get return value from stored procedure

我知道这个问题已经被问过很多次了,我经历了大多数问题,但没有一个解决了我的问题

我有一个称为LoginValidation的存储过程,该过程使用2个参数(用户名和密码)并返回相应用户的user_id

这是过程代码:

    @username nvarchar(50),
    @password nvarchar(50),
    @userID int output
AS
    SELECT @userID = user_id
    FROM Users_Master 
    WHERE user_name = @username and password = @password;

    RETURN

但是,当我尝试在C#中使用此过程时,会发生以下错误:

过程或函数“ LoginValidation”需要未提供的参数“ @userID”

这是我的C#代码:

protected void btnLogin_Click(object sender, EventArgs e)
{
    cmd.Connection = con;

    con.Open();

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "LoginValidation";

    cmd.Parameters.Add("@username", SqlDbType.VarChar).Value = txtmobile.Text;
    cmd.Parameters.Add("@password", SqlDbType.VarChar).Value = txtpwd.Text;

    SqlParameter returnParm = cmd.Parameters.AddWithValue("@userID", SqlDbType.VarChar);
    returnParm.Direction = ParameterDirection.ReturnValue;

    string id = returnParm.Value.ToString();

    try
    {
        dr = cmd.ExecuteReader();
    }
    catch (SqlException EX)
    {
        string ff = EX.Message;
    }

    if (dr.HasRows)
    {
        while (dr.Read())
        {
            Session["name"] = dr["user_name"].ToString();

            lblmsg.Text = "Login successful: " + id;
        }
    }
    else
    {
        lblmsg.Text = "Invalid username/password";
    }

    dr.Close();
    con.Close();
}

有什么建议吗?

尝试使用returnParm.Direction = ParameterDirection.Output;

请注意,在传递数据类型时,您使用了不正确的方法AddWithValue 您需要将其更改为:

SqlParameter returnParm = cmd.Parameters.Add("@userID", SqlDbType.VarChar);
returnParm.Direction = ParameterDirection.Output;

另外,您需要将方向设置为Output

然后,您需要执行查询读取值:

dr = cmd.ExecuteReader();
string id = returnParm.Value.ToString();

文件

输入 :参数是输入参数。

InputOutput :该参数可以输入和输出。

输出 :该参数是输出参数。

ReturnValue :该参数表示操作(例如存储过程,内置函数或用户定义的函数)的返回值。

首先,您决定要获取输出参数或返回值参数。

  1. 获取返回值参数。 您不必将任何额外的参数传递给存储过程。 只需添加以下行

     SqlParameter returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); int id = (int) returnParameter.Value; 
  2. 获取输出参数。 您完成的所有步骤都很好。 只需更换

     returnParm.Direction = ParameterDirection.ReturnValue; 

  returnParm.Direction = ParameterDirection.Output;

你做错了。 呼叫

string id = returnParm.Value.ToString();

dr = cmd.ExecuteReader();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM