繁体   English   中英

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

[英]How can I use IMultipleResults AND return Output Parameters from a SQL Stored procedure?

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

同样,它返回并允许我浏览存储过程返回的其他结果集,但它不返回任何 SQL output 参数。

这是我访问存储过程并返回 IMultipleResults object 的代码:

    [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);
        }
    }

output参数的值在数据库中的数据stream中最后发送,所以必须读取到最后一个结果集的末尾才能获取Z78E6221F6393D1356681DB398F14CED参数。

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

LINQ 到 SQL(第 6 部分 - 使用存储过程检索数据)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM