c#-4.0 - 尝试使用 Oracle Data Access ODP.NET 11.2 执行 ExecuteReader() 时出现 InvalidOperationException

标签 c#-4.0 oracle11g odp.net data-access

这是我第一次不得不与 Oracle 合作,因为我们都讨厌在您使用特定模型多年的同时使用外国东西,尽管这是我们的工作,我们必须完成它。

现在我已经安装了 Oracle 11 g 并复制并引用了 Oracle.DataAccess.dll 创建的方法,该方法打开连接并尝试从服务器上创建的 View 中检索一些对象。

方法:

public BindingList<HeaderReceiver> GetHeaderReceivers()
{
    try
    {
        using (OracleConnection db = new OracleConnection(BaseDataAccess.ConnString))
        {
            string cmdText = "select * from p_customer t";
            BindingList<HeaderReceiver> headerReceivers = new BindingList<HeaderReceiver>();

            OracleCommand cmd = new OracleCommand(cmdText) { CommandType = CommandType.Text };
            db.Open();

            OracleDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); <--- Error Occurs HERE!!!

            while (reader.Read())
                headerReceivers.Add(HeaderReceiver.GetInstance(reader));

            CustBranchRepository rep = new CustBranchRepository();
            headerReceivers.ForEach(p => p.DetailsBranch = rep.GetDetailReceivers(p.Id));

            reader.Close();
            db.Close();
            return headerReceivers;
        }
    }
    catch (Exception ex)
    {
        ExporterLogger.Log(ex);
        return null;
    }
}

现在,当 ExecuteReader() 提交时,我得到了这个 InvalidOperationException。

Operation is not valid due to the current state of the object.

堆栈跟踪:

   at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
   at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(CommandBehavior behavior)
   at Exporter.Boss.DataAccess.CustomerRepository.GetHeaderReceivers() in ...Exporter\Exporter.Boss.DataAccess\CustomerRepository.cs:line 25

任何想法和帮助...

谢谢!

最佳答案

看起来您缺少命令对象上的连接...

db.Open();
OracleCommand cmd = new OracleCommand(cmdText) { CommandType = CommandType.Text };
cmd.Connection = db;

关于c#-4.0 - 尝试使用 Oracle Data Access ODP.NET 11.2 执行 ExecuteReader() 时出现 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380485/

相关文章:

sql - Oracle 11G 中的 INSERT SELECT 语句

sql - 不同表的两个不同列(添加)的总和以及 Oracle 中的多表连接

C# 2010,ODP.net,调用存储过程传递数组

oracle - EF + ODP.NET + CLOB = 值不能为空 - 参数名称 : byteArray?

c# - Oracle 数字到 C# 十进制

c# - 具有继承 TPH 的 EF 4.1 Code First 复杂类型

linq - 这个 PredicateBuilder 类是如何工作的?

c# - 如何区分系统变量和自定义变量

sql - 在oracle中一行显示多行数据

wcf - 使用存储过程在数据库修改后更新上下文