如何使用IMultipleResults并从SQL存储过程返回输出参数?

时间:2011-06-30 19:27:52

标签: c# linq-to-sql stored-procedures

我有一个使用Linq-To-SQL访问的SQL存储过程。它返回多个结果集以及一对输出参数。当我在SQL中作为Query运行该过程时它可以工作,但是当我尝试从我的C#代码访问它时,它不想工作。 'UserHasAccessToOption'参数始终返回false,即使它仅在存储过程中设置为true。

同样,它返回并允许我浏览存储过程返回的其他ResultSet,但它不返回任何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);
        }
    }

2 个答案:

答案 0 :(得分:1)

输出参数的值最后在数据库的数据流中发送,因此您必须先读取最后一个结果集的末尾,然后才能获得输出参数。

答案 1 :(得分:0)

我建议您在这篇有价值的文章中看到“处理来自SPROC的多个结果形状”部分:

LINQ to SQL (Part 6 - Retrieving Data Using Stored Procedures)