2012-07-11 2 views
5

이것은 VS 2005를 사용하여 작성된 .NET 2.0 응용 프로그램입니다. .NET 2.0을 실행하는 시스템에서는 잘 작동하지만 .NET 4.0을 실행하는 시스템에서는 하드 충돌이 발생합니다.OleDBConnection 개체없이 OleDbDataAdapter 개체를 사용할 때 .NET 4.0 응용 프로그램이 .NET 4.0에서 충돌하는 이유는 무엇입니까?

 string selectCommand1 = .... 
     string connectionString1 = .... 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1)) 
     { 
      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

     string selectCommand2 = .... 
     string connectionString2 = .... 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connectionString2)) 
     { 
      try 
      { 
       adapter.Fill(table2); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

다시 말하지만, 그것은 .NET 2.0에서 작동, .NET 4.0

ConnectionStrings 1 & 2 참조 다른 .XLS 파일에서 충돌 다음은 코드의 중요한 부분이다.

이 문제를 해결하는 방법은 OleDbConnection 유형의 필드 변수를 선언하고 초기화 한 다음 ConnectionString 속성을 설정하고 OleDbDataAdapter using 문을 열기 전에 Open()하는 것입니다. 그래서 같이

OleDbConnection connection = new OleDbConnection(); 

    ....... 

     connection.ConnectionString = connectionString1; 
     connection.Open(); 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connection)) 
     { 
      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

     connection.Close(); 
     connection.ConnectionString = connectionString2; 
     connection.Open(); 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connection)) 
     { 
      try 
      { 
       adapter.Fill(table2); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 

는하지만, 이상 한 번에 코드 한 줄을 제거하고 이상 재 컴파일 한 후이 내 응용 프로그램은 하드 .NET 4.0에서 (오류 메시지)를 충돌하지 않은 이유라고 생각하기 어렵다 나는 그 사실을 문제의 원인으로 생각했다.

문제가 해결되어 기쁩니다. 첫 번째 코드가 .NET 4.0에서 작동하지 않는다는 사실에 만족하지 않습니다.

누군가 .NET 4.0이 위와 같은 코드로 작동하지 않는 이유를 설명해주십시오.

+1

MSDN에 따르면 사용중인 OleDbDataAdapter 생성자가 암시 적으로 생성 된 연결을 열지 않습니다. http://msdn.microsoft.com/en-us/library/2f8y4737%28v=vs.100%29 그러나이 문서의 2.0 버전을 보면 동일한 경고가 나타납니다. –

+0

그게 재미 있어요. 여전히 그것이 .net 2.0에서 작동하는 이유에 대한 대답을하지 않았지만 .net 4.0 –

+2

Windows 이벤트 로그를 점검하여 충돌에 대한 단서가 있는지 (명시 적 오류 메시지가 없다고 말했기 때문에) (catch) (Exception 예) {MessageBox.Show (ex.Message);}'? –

답변

3

문제는 "Application Verifier"입니다. 이를 제거하면 문제가 해결되었습니다.

2

원래 코드 (connection.open없이)에서 adapter.Fill(table1)을 호출하기 전에 테이블을 초기화 했습니까?

using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1)) 
    { 
     using (System.Data.DataTable table1 = new System.Data.DataTable()) { 

      try 
      { 
       adapter.Fill(table1); 
      } 
      catch 
      { 
       MessageBox.Show("error"); 
      } 
     } 
    } 
+0

예 테이블이 초기화됩니다. –

관련 문제