【问题标题】:Get return value from stored procedure using ExecuteSqlCommand (using Entity Framework)使用 ExecuteSqlCommand(使用实体框架)从存储过程中获取返回值
【发布时间】:2015-11-17 00:57:48
【问题描述】:

我的代码如下所示:

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

databaseContext 的类型是 System.Data.Entity.DbContext

我想使用返回值来知道存储过程是否运行成功。基于the documentationExecuteSqlCommand应该返回存储过程的结果。

但是,无论我设置存储过程做什么,该命令总是返回 -1 到 retval。我尝试过返回各种整数,甚至在存储过程中调用 RAISERROR,但返回值始终为 -1。

这是我尝试过的两个存储过程,但它们都返回 -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

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

【问题讨论】:

  • @DavidG,不,这是一个不同的问题。该问题要求查询采用特定格式,而 ExecuteSqlCommand 文档似乎不需要任何此类内容
  • 如果你想要返回值,你必须使用那个方法。 ExecuteSqlCommand 不会为您执行此操作,除非可能有 SELECTs 将值放入结果集中。
  • @DavidG,啊,我明白了。我已经看到了您链接的答案,但不了解其中的区别。如果您想发表您的评论作为答案,我会接受它
  • 不值得为该评论发布答案。

标签: c# sql-server entity-framework stored-procedures azure-sql-database


【解决方案1】:

根据 DavidG 的评论:

ExecuteSqlCommand 仅在是 select 语句的结果时才返回值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多