如何使用IMultipleResults AND从SQL存储过程返回Output Parameters
本文关键字:存储过程 返回 Output Parameters SQL 何使用 IMultipleResults AND | 更新日期: 2023-09-27 18:00:43
我有一个SQL存储过程,我正在使用Linq To SQL访问它。它返回多个结果集以及几个输出参数。当我在SQL中作为查询运行该过程时,它可以工作,但当我试图从C#代码访问它时,它不想工作。"UserHasAccessToOption"参数始终返回false,即使它仅在存储过程中设置为true。
同样,它返回并允许我浏览存储过程返回的其他ResultSet,但它不返回ANY SQL输出参数。
以下是我访问存储过程并返回IMultipleResults对象的代码:
[FunctionAttribute(Name = "dbo.GetOption")]
[ResultType(typeof(Option))]
[ResultType(typeof(LoanPurpose))]
[ResultType(typeof(LoanType))]
[ResultType(typeof(User))]
[ResultType(typeof(Client))]
[ResultType(typeof(OrganizationFinancialItem))]
public IMultipleResults GetOption(
int? OptionID,
int UserID,
bool GetClients,
bool GetOtherOrganizationUsers,
bool GetLoanPurposes,
bool GetLoanTypes,
bool GetOrganizationFinancialItems,
ref bool? UserHasAccessToOption)
{
using (profiler.Step("Call '"GetOption'" SProc"))
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod()))
, OptionID
, UserID
, GetClients
, GetOtherOrganizationUsers
, GetLoanPurposes
, GetLoanTypes
, GetOrganizationFinancialItems
, UserHasAccessToOption);
return (IMultipleResults)(result.ReturnValue);
}
}
输出参数的值在数据库的数据流中最后发送,因此您必须读取到最后一个结果集的末尾才能获得输出参数。
我建议您参阅这篇有价值的文章的"从SPROC处理多个结果形状"部分:
LINQ to SQL(第6部分-使用存储过程检索数据)