簡體   English   中英

EF Core:參數化查詢需要未提供的參數“@responseMessage”

[英]EF Core: Parameterized Query Expects the parameter '@responseMessage' which was not supplied

我嘗試從我的 asp.net 核心 MVC Web 應用程序調用以下存儲過程:

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',但未提供該參數。

從 EF Core 獲取此過程的output的正確方法是什么?

改變參數方向,

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);

請檢查存儲過程和存儲庫方法中定義的每個參數的空格。

我們需要修剪空格並重新運行程序。 在我們的例子中,我們必須刪除空格,一旦完成,API 方法就會成功執行......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM