相关疑难解决方法(0)

实体框架 - 存储过程返回值

我试图获取存储过程的返回值.以下是此类存储过程的示例:

select
    Name,
    IsEnabled
from
    dbo.something
where
    ID = @ID

if @@rowcount = 0
    return 1    

return
Run Code Online (Sandbox Code Playgroud)

这是一个简单的选择.如果找到0行,我的结果集将为null,但我仍然会有一个返回值.

这是一个糟糕的例子,因为这是一个选择,所以我确定我能找到返回0行.但是,在插入,删除或其他调用中,我们需要此返回值来了解是否存在问题.我一直无法找到获得此返回值的方法.我可以得到输出值,我可以得到结果集,但没有返回值.

如果我手动调用SQL,或者即使我SqlCommand使用实体框架运行,我也可以获得返回值,但这不是我想要做的.

有没有人能够使用Entity Framework从存储过程中获取返回值?

谢谢您的帮助!

c# sql stored-procedures entity-framework

11
推荐指数
2
解决办法
3万
查看次数

存储过程返回错误的标量值-1,而不是返回值

我试图从存储过程返回标量值.我实际上想要返回一个新创建的记录的ID,但我已经将我的问题简化为一个存储过程,该存储过程需要int并尝试返回相同的内容int.这总是返回-1.非常感谢您的帮助.

Web API控制器调用

var idtest = dbconn.my_return_int(123);
Run Code Online (Sandbox Code Playgroud)

存储过程:

ALTER PROCEDURE [dbo].[my_return_int]  
    @ID int  
AS  
BEGIN  
    SET NOCOUNT ON;  
    DECLARE @return as int

    SET @return = -999

RETURN @return
END   
Run Code Online (Sandbox Code Playgroud)

Context生成的存储过程调用

public virtual int my_return_int(Nullable<int> iD)  
{  
    var iDParameter = iD.HasValue ?
        new ObjectParameter("ID", iD) :
        new ObjectParameter("ID", typeof(int));

    return (IObjectContextAdapter)this).ObjectContext.ExecuteFunction("my_return_int", iDParameter);  
}  
Run Code Online (Sandbox Code Playgroud)

stored-procedures entity-framework entity-framework-6

5
推荐指数
3
解决办法
6721
查看次数

使用ExecuteSqlCommand从存储过程中获取返回值(使用Entity Framework)

我的代码看起来像这样:

int retval = databaseContext.Database.ExecuteSqlCommand(command, sqlParameters.ToArray());
Run Code Online (Sandbox Code Playgroud)

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

我想使用返回值来了解存储过程是否成功运行.基于文档 ExecuteSqlCommand应该返回存储过程的结果.

但是,无论我将存储过程设置为什么,该命令始终返回-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
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了吗?

c# sql-server stored-procedures entity-framework azure-sql-database

4
推荐指数
1
解决办法
2万
查看次数