2012-07-13 26 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

问题在于“应用程序验证程序”。

相关问题