无法从存储过程获取返回值
本文关键字:获取 返回值 存储过程 | 更新日期: 2023-09-27 18:11:28
我知道这个问题已经被问过很多次了,我已经经历了大多数,但没有一个解决我的问题
我有一个名为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#中使用这个过程时,会发生以下错误:
下面是我的c#代码:过程或函数'LoginValidation'期望参数'@userID',该参数未提供
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();
文档:
Input:输入参数。
InputOutput:该参数既可以输入也可以输出。
Output:参数为输出参数。
ReturnValue:参数表示返回值从诸如存储过程、内置函数或用户定义的函数。
首先决定要获取输出参数还是返回值参数。
-
获取返回值参数。您不必向存储过程传递任何额外的参数。只需在下面添加
SqlParameter returnParameter = cmd.Parameters.Add("RetVal", SqlDbType.Int); returnParameter.Direction = ParameterDirection.ReturnValue; cmd.ExecuteNonQuery(); int id = (int) returnParameter.Value;
-
获取输出参数。你所做的所有步骤都很好。只是替换
returnParm.Direction = ParameterDirection.ReturnValue;
returnParm.Direction = ParameterDirection.Output;
你做错了。叫
string id = returnParm.Value.ToString();
后dr = cmd.ExecuteReader();