Не удалось получить идентификатор пользователя из базы данных, используя Dapper - PullRequest
1 голос
/ 06 марта 2020
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 Метод, значение пользователя равно 0.
  2. Используя метод Query, ожидайте значение, но оно возвращает модель (закомментированный код)

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Ваша хранимая процедура использует параметр OUT, но ваш @UserID объявлен как ParameterDirection.ReturnValue.

Если вы используете ParameterDirection.Output, он должен работать как положено.

1 голос
/ 06 марта 2020

Вы просто изменяете SELECT @UserID => RETURN @ UserID . Тогда все будет работать как положено. Надеюсь на помощь, дружище :))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...