c# - 无法从存储过程中获取返回值

标签 c# sql-server stored-procedures

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

我有一个名为 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# 中使用此过程时,出现以下错误:

Procedure or function 'LoginValidation' expects parameter '@userID', which was not supplied

这是我的 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;

关于c# - 无法从存储过程中获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39831579/

相关文章:

c# - 使用 Font Awesome 图标渲染 ValidationMessageFor

c# - 比较两个 List<MyClass> : How to find out difference?

c# - 用于 QA/UAT 的虚拟机与物理机? VM 切片上的 .Net 运行时错误

sql-server - SQL server ERROR 列名不明确

sql-server - Node.js 系列 SQL 数据库连接问题

c# - 在 Asp.Net MVC 5 中使用 Entity Framework 6 代码优先方法调用存储过程

c# - 如何用c#拦截并更改http请求

sql-server - 插入行总和并将其显示在同一个表中

mysql - 在 if/else block 内创建表的问题

oracle - 如何在游标中使用嵌套表