c# - 从 ADO.NET 调用 Oracle 时批处理多个 select 语句

标签 c# oracle ado.net resultset

我想批处理多个 select 语句以减少到数据库的往返次数。该代码看起来类似于下面的伪代码。它在 SQL Server 上完美运行,但在 Oracle 上不起作用 - Oracle 提示 sql 语法。我环顾四周,发现从 Oracle 返回多个结果集的唯一示例是使用存储过程。是否可以在不使用存储过程的情况下在 Oracle 中执行此操作?我正在使用 MS Oracle 数据提供程序,但如果需要可以使用 ODP.Net。

var sql = @"
            select * from table1
            select * from table2
            select * from table3";

DbCommand cmd = GetCommand(sql);
using(var reader = cmd.ExecuteReader())
{
   dt1.Load(reader);
   reader.NextResult();
   dt2.Load(reader);
   reader.NextResult();
   dt3.Load(reader);
}

最佳答案

C# 中带有多个游标和输入参数的示例:

string ConnectionString = "connectionString";
OracleConnection conn = new OracleConnection(ConnectionString);
StringBuilder sql = new StringBuilder();

sql.Append("begin ");
sql.Append("open :1 for select * from table_1 where id = :id; ");
sql.Append("open :2 for select * from table_2; ");
sql.Append("open :3 for select * from table_3; ");
sql.Append("end;");

OracleCommand comm = new OracleCommand(sql.ToString(),_conn);

comm.Parameters.Add("p_cursor_1", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);

comm.Parameters.Add("p_id", OracleDbType.Int32, Id, ParameterDirection.Input);

comm.Parameters.Add("p_cursor_2", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);

comm.Parameters.Add("p_cursor_3", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);

conn.Open();

OracleDataReader dr = comm.ExecuteReader();

关于c# - 从 ADO.NET 调用 Oracle 时批处理多个 select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1062569/

相关文章:

c# - 如何为 ASP.NET MVC 5 创建依赖注入(inject)?

c# - 使用 XamlReader.Parse() 从字符串读取 xaml 时使用转换器

sql - 如何在plsql中动态定义类型

c# - 更正 VB 的 CTYPE() 的 C# 转换对应物

sql-server - 如何以有效的方式覆盖数据库中的重复数据?

c# - Entity Framework : adding existing child POCO to new Parent POCO, 在数据库中创建新子项

c# - 将文本添加到 RichTextBox Async#C/WPF

mysql - Oracle PL/SQL 存储过程日期时间间隔精度 ORA-30088

java - 来自 weblogic 的数据库连接

c# - 如何从 C# 在 SQLite DB 中插入和查询 DateTime 对象?