传递参数以返回存储过程的复杂结果

Posted

技术标签:

【中文标题】传递参数以返回存储过程的复杂结果【英文标题】:Pass parameter to return complex result of stored procedure 【发布时间】:2015-11-20 17:43:58 【问题描述】:

我可以通过“从数据库更新模型”向导成功添加我的存储过程。对于不需要任何输入参数的存储过程,我可以轻松检索复杂的查询。

但是,我无法返回需要输入参数的存储过程的结果。我尝试在我的 C# 类中传递它并将其存储在“结果”中,如下所示:

//20 is the value I am passing into my stored procedure    
IEnumerable<MyClass> result = _db.MyStoredProcedure(20).Select(x => new MyClass()....);
return result;

但我无法检索结果,因为“int”不包含“Select”的定义。

我相信这是因为我需要在模型浏览器的复杂类型中实际有一个结果类型。我可以创建自定义参数,但是我无法将存储过程的返回值转换为这些值,因为我无法设置该参数。

我在我的存储过程中注意到它具有需要在 Database.Store 位置下的“存储过程/函数”文件夹中初始化的变量。有什么办法可以将它设置为我想要传递的值? (我在模型浏览器中检查了该特定 ID 的属性)

或者,也许我想错了。

任何帮助都会很棒。

提前致谢。

【问题讨论】:

【参考方案1】:

我对这个问题的解决方法真的很简单。

所以传递参数是正常的。在我的问题中,我实际上应该将 20 传递到上述示例中。问题在于存储过程本身。

由于 ADO 没有内置的方法来设置/传递参数,因此您需要手动修改 SQL 查询,以执行存储过程应该执行的操作。所以我修改了我的存储过程以打印出它应该执行的内容,使用

print result

然后从“消息”中复制并粘贴存储过程的结果(因此我的选择带有我通常会传递的参数)。然后我在模型浏览器中重新编辑函数导入,然后点击“获取列信息”并获得我特别想要的复杂结果类型。

有效!

【讨论】:

以上是关于传递参数以返回存储过程的复杂结果的主要内容,如果未能解决你的问题,请参考以下文章

oracle中调用存储过程时传递参数值的3种方式。。

Procedure 存储过程

将函数返回值传递给存储过程参数

添加参数,如果执行存储过程后没有返回记录,则显示消息

如何传递逗号分隔的输入参数以从另一个存储过程调用存储过程

在 azure synapse 存储过程中将表名作为参数传递时将查询结果分配给变量