代码之家  ›  专栏  ›  技术社区  ›  Jaster

使用Oracle的多个结果集

  •  3
  • Jaster  · 技术社区  · 6 年前

    简单问题:

    我的代码如下:

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

    现在,我希望在数据集中得到两个表,但我宁愿得到一个异常,告诉我SQL语法不正确…似乎;不是这样认识的吗?有什么想法吗?

    编辑1: 同时添加 开始+结束; 不起作用(多种变化)

    编辑2: 将所选内容包装为 立即执行 将运行,但不会返回结果集。

    解决方案 :将提供的答案与 Using Dapper with Oracle stored procedures which return cursors 享受吧。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Hasan Fathi    6 年前

    你应该写一封匿名信 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);