2011-03-21 36 views
2

私はOracleと作業しなければならないのですが、何年か特定のモデルで作業している間は、これは私たちの仕事ですが、私たちはそれを作らなければなりません。Oracle Data AccessでExecuteReader()を試行するとODP.NET 11.2

これで、Oracle 11gをインストールし、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 

任意の考えと助け...

ありがとうございました!

答えて

9

コマンドオブジェクトの接続が欠落しているように見えます...

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

は、この記事を見つけました。 CommandオブジェクトでExecuteDataReader()を呼び出すと、このエラーが発生しました。私はCommandオブジェクトで接続を設定しましたが、ExecuteDataReader()を呼び出した後でこれを行いました。私は2つのラインを切り替えたとき、それは完璧にうまくいった。だから、これは正しい答えとマークする必要があります。 – Jeroen

関連する問題