2011-03-21 6 views
2

오라클과 협력해야하는 것은 처음입니다. 몇 년 동안 특정 모델로 작업하는 동안 우리는 모두 외계인과 작업하는 것을 싫어하므로, 이것이 우리의 일이지만 우리는 그것을해야합니다.Oracle 데이터 액세스로 ExecuteReader()를 시도 할 때 InvalidOperationException 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. 

스택 트레이스 :

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()를 호출 한 후에이 작업을 수행했습니다. 내가 두 줄을 바꿨을 때 완벽하게 잘 작동했다. 따라서 이것은 올바른 대답으로 표시되어야합니다. – Jeroen

관련 문제