EF Core: параметризованный запрос Ожидается, что параметр'responseMessage 'не был указан - PullRequest
0 голосов
/ 24 января 2019

У меня есть следующая хранимая процедура, которую я пытаюсь вызвать из моего основного веб-приложения MVC asp.net:

CREATE PROCEDURE [dbo].[uspLogin]
(
    @pUserName VARCHAR(150),
    @pPassword VARCHAR(150),
    @responseMessage NVARCHAR(250)='' OUTPUT
)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON

    DECLARE @userID INT

    IF EXISTS (SELECT TOP 1 ID FROM dbo.[User] WHERE UserName = @pUserName)
    BEGIN
        SET @userID = (SELECT ID FROM dbo.[User] WHERE UserName = @pUserName AND PasswordHash=HASHBYTES('SHA2_512', @pPassword+CAST(Salt AS NVARCHAR(36))))

        IF(@userID IS NULL)
            SET @responseMessage='Incorrect password'
        ELSE
            SET @responseMessage='Success'
    END
    ELSE
        SET @responseMessage = 'Invalid Login'
END

Я могу нормально вызывать эту процедуру из своей БД, однако я пытаюсь вызвать ее с помощью этого кода:

[HttpPost]
public IActionResult Index(User user)
{
    var userName = user.UserName;
    var password = user.Password;
    var message = new SqlParameter
    {
        ParameterName = "responseMessage",
        SqlDbType = SqlDbType.NVarChar,
        Size = 250,
        Direction = ParameterDirection.InputOutput,
    };
    _context.Database.ExecuteSqlCommand("dbo.uspLogin @p0, @p1, @responseMessage", userName, password, message);

    return RedirectToAction("Success", "Home", new { email = message.SqlValue });
}

При тестировании этого действия я получаю следующую ошибку:

SqlException: параметризованный запрос '(@ p0 nvarchar (4000), @ p1 nvarchar (4000), @ responseMessage nvarchar' ожидает параметр '@responseMessage', который не был предоставлен.

Как правильно получить output этой процедуры от EF Core?

1 Ответ

0 голосов
/ 24 января 2019

Изменить направление параметра,

var message = new SqlParameter
{
    ParameterName = "responseMessage",
    SqlDbType = SqlDbType.NVarChar,
    Size = 250,
    Direction = ParameterDirection.Output,
};

И строка выполнения, как показано ниже, и попробуйте,

_context.Database.ExecuteSqlCommand("dbo.uspLogin @p0, @p1, @responseMessage OUT", userName, password, message);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...