InvalidOperationException при попытке выполнить ExecuteReader () с Oracle Data Access ODP.NET 11.2 - PullRequest
2 голосов
/ 21 марта 2011

Я впервые работаю с Oracle, и, поскольку мы все ненавидим работать с иностранными вещами, когда вы работаете с определенной моделью, несколько лет, хотя это наша работа, и мы должны ее выполнить.

Теперь я установил Oracle 11 g, скопировал и сослался на Oracle.DataAccess.dll, создал метод, который открывает соединение и пытается извлечь некоторые объекты из представления, созданного на сервере.

Метод:

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.

StackTrace:

   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

Любые мысли и помощь ...

Спасибо!

1 Ответ

9 голосов
/ 30 марта 2011

Похоже, вы пропустили соединение с объектом команды ...

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