简单问题:
我的代码如下所示:
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);
现在,我希望可以在DataSet中获得两个表,但是我宁愿得到一个异常,告诉我SQL语法不正确。是不是那样认识的..?有任何想法吗?
编辑1:同时添加BEGIN + END;不起作用(多种变体)
编辑#2:将选择内容与换行,立即执行将运行,但不会返回结果集。
解决方案:将提供的答案与Using Dapper with Oracle stored procedures which return cursors结合使用,即可享用。
最佳答案
您应该编写一个返回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);
关于c# - 使用Oracle的多个结果集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51249342/