2012-07-11 22 views
5

Bu, VS 2005 kullanılarak yazılmış bir .NET 2.0 uygulamasıdır. .NET 2.0 çalıştıran sistemlerde çalışır, ancak .NET 4.0 kullanan sistemlerde sabit çökmeler çalışır.neden bir OleDBConnection nesnesi olmayan bir OleDbDataAdapter nesnesi kullandığımda .NET 2.0 uygulama .NET 4.0 altında çöküyor?

 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"); 
      } 
     } 

Yine, .NET 2.0 altında çalışır, .NET 4.0

connectionStrings 1 & 2 referans farklı .xls dosyaları altında çöküyor: Burada kodun kritik bölüm var.

Bu sorunun çevresinin, OleDbConnection türünde bir alan değişkeni bildirmesi ve başlatması olduğunu, ConnectionString özelliğini ve OleDbDataAdapter'ın kullanma deyiminden önce Aç() öğesini ayarladığını buldum. böylece gibi:

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"); 
      } 
     } 

O ancak üzerinde bir seferde kod tek satırlarını kaldırılması ve üzerinde yeniden derlenmesine ve sonra bu benim app sert .NET 4.0 altında (hiçbir hata iletileri) çökmesini nedeni olduğuna inanmak zor Sorunun sebebi olduğunu buldum.

Sorunu çözdüğüme sevindim, ancak ilk kodun .NET 4.0 ile çalışmadığı gerçeğinden memnun değilim.

Birisi, .NET 4.0'ın neden yukarıdaki gibi bir kodla çalışmak istemediğini açıklayabilir mi?

+1

MSDN'ye göre, kullandığınız OleDbDataAdapter kurucusu örtülü olarak oluşturulan bağlantıyı açmıyor. http://msdn.microsoft.com/en-us/library/2f8y4737%28v=vs.100%29 Ancak, bu belgelerin 2.0 sürümüne bakarsanız, aynı uyarıyı verir. –

+0

bu ilginç. hala neden .net 2.0 altında çalıştığı sorusunu yanıtlamıyor ama değil. net 4.0 –

+2

Kaza için herhangi bir ipucu olup olmadığını görmek için windows olay günlüklerini kontrol ettiniz mi (açık bir hata mesajı olmadığını belirttiniz?) sadece bir yakalama yapıyorsunuz ... Eğer yakalama (exception ex) yaparsanız ne olur? {MessageBox.Show (ex.Message);} '? –

cevap

3

Sorun "Application Verifier" idi. Kaldırma sorunu çözdü.

2

Orijinal kodunuzda (connection.open olmadan), adapter.Fill(table1) numaralı telefonu aramadan önce tabloları başlattınız mı?

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

evet tabloları başlatıldı. –