使用ExecuteSqlCommand(使用实体框架)从存储过程中获取返回值

本文关键字:存储 存储过程 过程中 返回值 获取 框架 ExecuteSqlCommand 实体 使用 | 更新日期: 2023-09-27 18:22:06

我有这样的代码:

int retval = databaseContext.Database.ExecuteSqlCommand(command, sqlParameters.ToArray());

其中databaseContext的类型为System.Data.Entity.DbContext

我想使用返回值来知道存储过程是否成功运行。根据文档ExecuteSqlCommand应返回存储过程的结果。

然而,无论我将存储过程设置为执行什么操作,该命令都会将-1返回到retval。我曾尝试返回各种整数,甚至在存储过程中调用RAISEROR,但返回值始终为-1。

以下是我尝试过的两个存储的proc,但它们都返回了-1,并且没有给出它是否成功运行的任何指示:

CREATE PROCEDURE [dbo].[myproc]
AS
BEGIN
      RAISERROR ('You fail', -- Message text.
                       0, -- Severity - operation failed.
                       500-- State.
                       );
END
GO
CREATE PROCEDURE [dbo].[myproc]
AS
BEGIN
      RETURN 1
END
GO

知道我在这里做错了什么吗?

使用ExecuteSqlCommand(使用实体框架)从存储过程中获取返回值

基于DavidG的评论:

ExecuteSqlCommand仅在其为select语句的结果时返回值。

如果您想要存储过程的返回值(如问题中所示),则必须使用本SO答案中所述的EXEC @ReturnValue = [StoredProc] @param1 ...方法。