[英]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.