2012-07-13 27 views
4

我有一段使用VS 2005編寫的代碼,可以在運行.NET 2.0的計算機中正常工作,但在運行.NET 4.0的計算機中發生硬性崩潰。在ADO.NET 4.0中處理多個連接到多個Excel文件的正確方法是什麼?

導致問題的hte代碼段是對DataAdapter的Fill()方法的調用。代碼如下所示:

private void button_Click(object sender, EventArgs e) 
{ 
    DataTable dt1 = new DataTable(); 
    string connectionString = ... //connects to excelfile1.xls 
    string selectCommand = "SELECT * FROM [Sheet1$]"; 

    using(OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand, connectionString)) 
    { 
     adapter.SelectCommand.Connection.Open(); 
     adapter.Fill(dt1); 
    } 

    DataTable dt2 = new DataTable(); 
    connectionString = ... //connects to excelfile2.xls 

    using(OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand, connectionString)) 
    { 
     adapter.SelectCommand.Connection.Open(); 
     adapter.Fill(dt2); 
    } 
} 

幾件事情發生,如果我做輕微的修改代碼:如果我刪除了兩個電話給OleDbConnection.Open()

  1. ,代碼將只是工作與.NET 2.0一樣好,但是與.NET 4.0很難碰撞。

  2. 如果我只刪除第二次調用OleDbConnection.Open(),代碼將與.NET 2.0和.NET 4.0正常工作。唉,我需要從兩個獨立的excel文件中檢索數據,並在每次事件觸發時填充兩個單獨的DataTable。

  3. 如果我同時使用OleDbConnection.Open()的兩個調用,如上面的代碼所示,代碼將與.NET 2.0和.NET 4.0一起正常工作,但是第二次或第三次與.NET 4.0硬件崩潰用戶點擊按鈕並且程序運行。

我的猜測是.NET 4.0管理連接與.NET 2.0不同,我錯過了一些非常重要的步驟。

有人能告訴我應該如何編寫上述代碼,以便它能在.NET 2.0和.NET 4.0下正常工作嗎?

+3

正如我在你的其他問題中提到的(http://stackoverflow.com/questions/11438952/why-does-my-net-2-0-application-crash-under-net-4-0-when-i -use-a-oledbdataadap),將調用包裝在'try/catch'塊中,確保包含'(Exception ex)'。這應該至少讓你知道什麼是例外。如果有疑問,請使用Windows事件查看器查找異常。 – 2012-07-16 17:08:03

+0

try/catch塊不捕獲異常。一個接一個地抓不到它。 catch(Exception e)也沒有抓住它。 – 2012-07-16 20:37:49

+0

賈森,如你所說我查看了事件日誌。我發現以下內容:日誌名稱:應用程序。來源:應用程序掛起。該程序停止與Windows交互並被關閉。要查看是否有關於該問題的更多信息,請在Action Center控制面板中檢查問題歷史記錄。當我點擊詳細信息選項卡並檢查二進制文件時,它會顯示「C.r.o.s.s .-。t.h.r.e.a.d ....」這是一個跨線程異常?以及如何來a)它不會拋出與.NET 2.0和b)它是拋出,但沒有捕獲與.NET 4.0? – 2012-07-16 20:45:39

回答

0

問題在於「應用程序驗證程序」。

相關問題