如何使用dapper和c#检索多个sys_refcursor?

发布于 2025-01-22 22:17:07 字数 1200 浏览 2 评论 0原文

我想使用Dapper从Oracle DB中检索多个SYS_REFCURSOR。 我的PL/SQL代码下面

procedure GetData2 (p_result out sys_refcursor, p_result2 out sys_refcursor)
 is
 begin
   open p_result for
        select '1' col1, '2' col2 from dual
        union all
        select '11' col1, '22' col2 from dual;
        
   open p_result2 for
        select '3' col1, '4' col2 from dual;
 end;

,我的C#代码在此C#代码下方

using OracleConnection connection = new OracleConnection();
connection.ConnectionString = "";
connection.Open();
    
    
OracleDynamicParameters parameters = new OracleDynamicParameters();
parameters.Add(name: "p_result", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
parameters.Add(name: "p_result2", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
    
var reader = connection.QueryMultiple("TEST_PACKAGE.GetData2", param: parameters, commandType: CommandType.StoredProcedure);
    
IEnumerable<MyClasss> dt = reader.Read<MyClasss>();
    
foreach (var item in dt)
{
    Console.WriteLine(item.col1);
}

仅给我P_Result表结果。 如何使用dapper检索两个sys_refcursor结果?

I want to retrieve multiple sys_refcursors from oracle db using dapper.
My PL/SQL code below

procedure GetData2 (p_result out sys_refcursor, p_result2 out sys_refcursor)
 is
 begin
   open p_result for
        select '1' col1, '2' col2 from dual
        union all
        select '11' col1, '22' col2 from dual;
        
   open p_result2 for
        select '3' col1, '4' col2 from dual;
 end;

And my c# code is below

using OracleConnection connection = new OracleConnection();
connection.ConnectionString = "";
connection.Open();
    
    
OracleDynamicParameters parameters = new OracleDynamicParameters();
parameters.Add(name: "p_result", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
parameters.Add(name: "p_result2", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
    
var reader = connection.QueryMultiple("TEST_PACKAGE.GetData2", param: parameters, commandType: CommandType.StoredProcedure);
    
IEnumerable<MyClasss> dt = reader.Read<MyClasss>();
    
foreach (var item in dt)
{
    Console.WriteLine(item.col1);
}

This c# code only gives me p_result table result.
How can I retrieve two sys_refcursor results using dapper?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷月断魂刀 2025-01-29 22:17:07

您必须调用一种方法,以转移到数据读取器中的下一个结果。该方法称为.nextresult()
尝试以下代码:

using OracleConnection connection = new OracleConnection();
connection.ConnectionString = "";
connection.Open();
    
    
OracleDynamicParameters parameters = new OracleDynamicParameters();
parameters.Add(name: "p_result", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
parameters.Add(name: "p_result2", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
    
var reader = connection.QueryMultiple("TEST_PACKAGE.GetData2", param: parameters, commandType: CommandType.StoredProcedure);
    
IEnumerable<MyClasss> dt = reader.Read<MyClasss>();
    
foreach (var item in dt)
{
    Console.WriteLine(item.col1);
}
reader.NextResult();

IEnumerable<MyClasss> dt2 = reader.Read<MyClasss>();
    
foreach (var item in dt2)
{
    Console.WriteLine(item.col1);
}

You have to call a method to move to the next result in your data reader. The method is called .NextResult().
Try following code:

using OracleConnection connection = new OracleConnection();
connection.ConnectionString = "";
connection.Open();
    
    
OracleDynamicParameters parameters = new OracleDynamicParameters();
parameters.Add(name: "p_result", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
parameters.Add(name: "p_result2", dbType: OracleMappingType.RefCursor, direction: ParameterDirection.Output);
    
var reader = connection.QueryMultiple("TEST_PACKAGE.GetData2", param: parameters, commandType: CommandType.StoredProcedure);
    
IEnumerable<MyClasss> dt = reader.Read<MyClasss>();
    
foreach (var item in dt)
{
    Console.WriteLine(item.col1);
}
reader.NextResult();

IEnumerable<MyClasss> dt2 = reader.Read<MyClasss>();
    
foreach (var item in dt2)
{
    Console.WriteLine(item.col1);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文