Oracle 的多个结果集

Jas*_*ter 6 c# oracle ado.net

简单的问题:

我的代码如下所示:

        var con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.20.10.8)(PORT=1521))(CONNECT_DATA=(SID=orcl12c)));");
        con.Open();

        var adp = new OracleDataAdapter("select * from adr;select * from person;", con);
        var ds = new DataSet();
        adp.Fill(ds);
Run Code Online (Sandbox Code Playgroud)

现在我希望在 DataSet 中得到两个表,但我宁愿得到一个异常,告诉我 SQL 语法不正确......似乎; 不被认可的方式..?有任何想法吗?

编辑 #1:同时添加BEGIN+END;不起作用(多种变体)

编辑#2:立即执行包装选择将运行,但不会返回结果集。

解决方案:将提供的答案与将 Dapper 与 Oracle 存储过程结合使用,返回游标并享受。

Has*_*thi 3

您应该编写一个pl/sql返回 的匿名块ref cursors

试试这个ADO.NET

    oraConnection = new OracleConnection();
    da = new OracleDataAdapter();
    ds = new DataSet();

    oraConnection.ConnectionString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.20.10.8)(PORT=1521))(CONNECT_DATA=(SID=orcl12c)));";
    cmdText = "begin open :1 for select * from adr; open :2 for select * from person; end;"; 
    cmd = new OracleCommand();
    cmd.CommandText = cmdText;
    cmd.Connection = oraConnection;
    cmd.CommandType = CommandType.Text; 

    OracleParameter refcur1 = cmd.Parameters.Add("Refcur", OracleDbType.RefCursor);
    refcur1.Direction = ParameterDirection.Output;
    OracleParameter refcur2 = cmd.Parameters.Add("Refcur", OracleDbType.RefCursor);
    refcur2.Direction = ParameterDirection.Output;

        da.SelectCommand = cmd;
        da.Fill(ds);
Run Code Online (Sandbox Code Playgroud)