为了账号安全,请及时绑定邮箱和手机立即绑定

从存储过程获取返回值

/ 猿问

从存储过程获取返回值

C#
POPMUISE 2019-11-14 15:14:07

我正在使用带有“代码优先”方法的Entity Framework 5。我需要从存储过程中读取返回值;我已经在读取输出参数并发送输入参数,但是我不知道如何读取返回值。


可能吗?


这是我用来调用存储过程的代码:


var outParam = new SqlParameter();

outParam.ParameterName = "@StatusLog";

outParam.SqlDbType = SqlDbType.NVarChar;

outParam.Size = 4000;

outParam.Direction = ParameterDirection.Output;


var code = new SqlParameter();

code.ParameterName = "@Code";

code.Direction = ParameterDirection.Input;

code.SqlDbType = SqlDbType.VarChar;

code.Size = 20;

code.Value = "123";


var data = _context.Database.SqlQuery<Item>("exec spItemData @Code, @StatusLog OUT", code, outParam);


var result = data.FirstOrDefault();


查看完整描述

3 回答

?
慕姐829404

我找到了!我可以使用必须以这种方式使用的输出参数读取返回值:


// define a new output parameter

var returnCode = new SqlParameter();

returnCode.ParameterName = "@ReturnCode";

returnCode.SqlDbType = SqlDbType.Int;

returnCode.Direction = ParameterDirection.Output;


// assign the return code to the new output parameter and pass it to the sp

var data = _context.Database.SqlQuery<Item>("exec @ReturnCode = spItemData @Code, @StatusLog OUT", returnCode, code, outParam);


查看完整回答
反对 回复 2019-11-14
?
翻阅古今

Daniele提供的解决方案不适用于我,直到我从Diego Vega找到了这篇博客文章,其中解释说:


您需要先读取整个结果,然后才能访问输出参数的值(...)。这只是存储过程的工作方式,并不特定于此EF功能。


另外,就我而言,我没有返回实体,只需要执行存储过程,所以我Item用objectin 代替_context.Database.SqlQuery<object>。


这是示例代码:


var code = new SqlParameter("@Code", 1);


var returnCode = new SqlParameter("@ReturnCode", SqlDbType.Int);

returnCode.Direction = ParameterDirection.Output;


var outParam = new SqlParameter("@StatusLog", SqlDbType.Int);

outParam.Direction = ParameterDirection.Output;


var sql = "exec @ReturnCode = spSomeRoutine @Code, @StatusLog OUT";

var data = _context.Database.SqlQuery<object>(sql, returnCode, code, outParam);


// Read the results so that the output variables are accessible

var item = data.FirstOrDefault();


var returnCodeValue = (int)returnCode.Value;

var outParamValue = (int)outParam.Value;

这是一个示例存储过程:


CREATE PROCEDURE [dbo].[spSomeRoutine]

    @Code Int,

    @StatusLog INT OUTPUT

AS

BEGIN

    SET @StatusLog = 5

    RETURN 10

END


查看完整回答
反对 回复 2019-11-14
?
MYYA

在存储的proc没有输出参数的情况下,请执行以下操作,以有效地使某些Sql返回select语句;


var data = context.Database.SqlQuery<int>(@"declare @num int

exec  @num = myStoredProcThatReturnsInt 

select @num");


var result = data.First();


查看完整回答
反对 回复 2019-11-14

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信