这返回-1,我如何从存储过程中获取实际返回值?
这是我的存储过程
ALTER PROCEDURE [Production].[Select_TicketQuantity]
@Ticket NVARCHAR(25),
@Reference NVARCHAR(20)
AS
BEGIN
declare @SQL nvarchar (4000)
SET @SQL = 'select QARTCOL as Quantidade from D805DATPOR.GCARCCR1 where NCOLGIA = ' + @Ticket + ' AND NARTCOM = ''' + @Reference + ''''
SET @SQL = N'select CONVERT(int,Quantidade) as Quantidade from OpenQuery(MACPAC, ''' + REPLACE(@SQL, '''', '''''') + ''')'
PRINT @SQL
EXEC (@SQL)
END
C# 代码
int? quantity= 0;
try
{
quantity= await _context.Database.ExecuteSqlRawAsync("EXEC Production.Select_TicketQuantity @p0, @p1", parameters: new[] { ticket, reference});
}
catch (Exception ex)
{
_logger.LogError($"{ex}");
return RedirectToPage("Index");
}
最佳答案
ExecuteSqlRawAsync
返回 the number of rows affected
用于插入、更新和删除(-1 用于选择)。
如果您不想更改您的 SP 以引入 output parameter
您可以使用 SqlCommand
. SqlCommand.ExecuteScalar()
返回 The first column of the first row in the result set
:
using (var cmd = _context.Database.GetDbConnection().CreateCommand()) {
cmd.CommandText = "[Production].[Select_TicketQuantity]";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
if (cmd.Connection.State != System.Data.ConnectionState.Open) cmd.Connection.Open();
cmd.Parameters.Add(new SqlParameter("Ticket", ticket));
cmd.Parameters.Add(new SqlParameter("Reference", reference));
quantity = (int)cmd.ExecuteScalar();
}
关于c# - Entity Framework Core 3.1 从存储过程返回值 (int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59624695/