【问题标题】:Fail to retrieve the User Id from Database using Dapper使用 Dapper 从数据库中检索用户 ID 失败
【发布时间】:2020-03-06 08:09:26
【问题描述】:
public int UserAuthentication(UsersViewModel users)
{
        DynamicParameters parameters = new DynamicParameters();
        parameters.Add("@UserName", users.UserName);
        parameters.Add("@Password", users.Password);
        parameters.Add("@UserID", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

        connection();
        sqlConn.Open();

        var result =  sqlConn.Execute("usp_UserLoginValidation", parameters, commandType: CommandType.StoredProcedure);            
        // int userid = SqlMapper.Query<UsersViewModel>(sqlConn, "usp_UserLoginValidation", parameters, commandType: CommandType.StoredProcedure).FirstOrDefault();
        int userid = parameters.Get<int>("@UserID");

        sqlConn.Close();            

        return userid;
}

存储过程:

ALTER PROCEDURE usp_UserLoginValidation
    (@UserName varchar(50),
     @Password varchar(20),
     @UserID int = 100 OUT)
AS
BEGIN
    SET @UserID = (SELECT UserId FROM Users 
                   WHERE UserName = @UserName AND Password = @Password AND IsActive = 1)
    SELECT @UserID
END

当用户登录应用程序时,我正在尝试从数据库表中获取UserId。在数据库中执行存储过程会返回UserId,但无法使用 Dapper 将该信息提取到类中。

我尝试了以下方法:

  1. 使用Execute方法,userid值为0。
  2. 使用Query 方法,期望值但返回模型(注释代码)

任何帮助将不胜感激。

【问题讨论】:

    标签: c# sql-server asp.net-mvc dapper


    【解决方案1】:

    您的存储过程使用OUT 参数,但您的@UserID 被声明为ParameterDirection.ReturnValue

    如果您使用ParameterDirection.Output,它应该可以按预期工作。

    【讨论】:

    • 谢谢..它工作。只是一个后续问题,当查询返回模型而不是值时。
    • stackoverflow.com/questions/3815502/…它应该回答你关于何时使用返回值与输出参数的问题
    【解决方案2】:

    您只需修改 SELECT @UserID => RETURN @UserID。然后它将按预期工作。 希望能帮到你,我的朋友:))

    【讨论】:

    • 谢谢。它在使用 Execute 方法时不适用于 Query 方法。
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多