4

我正在使用实体框架。我创建了一个名为 Customer 的实体对象并添加了我的存储过程。

我的存储过程包含另外两个存储过程,它们在输出参数中返回一些字符串。我将两个存储过程的输出参数值连接到主存储过程中。

主存储过程也在输出参数中返回结果字符串。

我还为主存储过程创建了一个函数导入以返回连接的字符串。

当我运行我的应用程序时,我得到“存储数据提供程序返回的数据读取器没有足够的列用于请求的查询。”

我在第一个和第二个过程中没有选择语句。让我知道如何返回主存储过程的输出参数值。

在下面找到更多信息。

Create Procedure MainProcedure
@Id int,
@MainResult nvarchar(max) output
AS
Begin
declare @firstResult nvarchar(max)
declare @secondResult nVarchar(max)
declare @MainResult nVarchar(max)

Exec FirstSP @Id,@firstResult Output
Exec SecondSP @Id,@secondResult Output

Set @MainResult=@firstResult+@secondResult

End

实体代码看起来像

System.Data.Objects.ObjectResult<string> resultList = null;
     var OutputParamter =new ObjectParameter("MainResult",typeof(string));
        resultList = ent.MainProcedure(ID, OutputParamter);
4

1 回答 1

3

我看不到您的存储过程可以为您提供更多帮助,但是当我使用存储过程并尝试通过“return”语句获取返回值时,我遇到了这个错误

IF EXISTS (SELECT * FROM Table) 
    return 0

这在 sql server 上运行良好,但在 EF 上却不行。

我的解决方案是用 select 语句替换 return 语句,如下所示:

IF EXISTS (SELECT * FROM Table) 
    --return 0
    select @OUTPUT=0

链接了解更多信息。

于 2019-07-15T11:29:56.503 回答