我试图获取存储过程的返回值.以下是此类存储过程的示例:
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从存储过程中获取返回值?
谢谢您的帮助!
我试图从存储过程返回标量值.我实际上想要返回一个新创建的记录的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) 我的代码看起来像这样:
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