【发布时间】:2010-07-07 02:09:54
【问题描述】:
寻找有关获取返回值和结果集的最简洁方法的建议(不将引用的参数传递给存储的过程)。
MY 存储的过程有返回值来显示错误等,它们以 select 语句结束以获取信息。使用常规命令,我将创建一个保存返回值的输出参数。我无法更改数据库中存储的过程,因此除了返回值之外,我无法传递不同的输出参数。
想法??
【问题讨论】:
标签: c# sql linq linq-to-sql stored-procedures
寻找有关获取返回值和结果集的最简洁方法的建议(不将引用的参数传递给存储的过程)。
MY 存储的过程有返回值来显示错误等,它们以 select 语句结束以获取信息。使用常规命令,我将创建一个保存返回值的输出参数。我无法更改数据库中存储的过程,因此除了返回值之外,我无法传递不同的输出参数。
想法??
【问题讨论】:
标签: c# sql linq linq-to-sql stored-procedures
当您在 LINQ to SQL 数据上下文设计器中通过从服务器资源管理器中拖动存储过程来创建存储过程时,设计器将分析存储过程以确定它是否返回结果集。除非它具有繁重的动态 SQL,否则它通常是正确的。
如果是,则生成的方法返回ISingleResult<T>,其中T 是通过分析存储过程生成的类以适应结果集的形状,或者是您在存储过程属性页面中指定的类。因为ISingleResult 派生自IEnumerable,所以大多数人对结果进行简单的foreach 以获得他们的结果集。但大多数人忘记的是ISingleResult 也 派生自IFunctionResult,它有一个名为ReturnValue 的属性。 这是存储过程的返回值。
所以你所要做的就是:
using(var dc = new MyDataContext())
{
var results = dc.MyStoredProcedure();
var returnValue = (int)results.ReturnValue; // note that ReturnValue is of type object and must be cast.
foreach(var row in results)
{
// process row
}
}
【讨论】: