[英]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 :该参数表示操作(例如存储过程,内置函数或用户定义的函数)的返回值。
首先,您决定要获取输出参数或返回值参数。
获取返回值参数。 您不必将任何额外的参数传递给存储过程。 只需添加以下行
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.