【问题标题】:what's the proper way to handle multiple connections to multiple Excel files in ADO.NET 4.0?在 ADO.NET 4.0 中处理与多个 Excel 文件的多个连接的正确方法是什么?
【发布时间】:2012-07-13 00:38:07
【问题描述】:

我有一段使用 VS 2005 编写的代码,它在运行 .NET 2.0 的计算机上运行良好,但在运行 .NET 4.0 的计算机上却严重崩溃。

导致问题的代码部分是对 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);
    }
}

如果我对代码稍作修改会发生一些事情:

  1. 如果我删除对 OleDbConnection.Open() 的两个调用,代码将在 .NET 2.0 中正常工作,但在 .NET 4.0 中会严重崩溃。

  2. 如果我只删除对 OleDbConnection.Open() 的第二次调用,则代码将在 .NET 2.0 和 .NET 4.0 中正常工作。唉,每次触发事件时,我都需要从两个单独的 excel 文件中检索数据并填充两个单独的数据表。

  3. 1234563用户点击按钮和程序运行的时间。

我的猜测是 .NET 4.0 管理连接的方式与 .NET 2.0 不同,我错过了一些非常重要的步骤。

谁能告诉我应该如何编写上面的代码,使其在 .NET 2.0 和 .NET 4.0 下可以正常工作?

【问题讨论】:

  • 正如我在您的另一个问题 (stackoverflow.com/questions/11438952/…) 中提到的,将调用包装在 try/catch 块中,确保包含 (Exception ex)。这至少应该让您知道异常是什么。如有疑问,请使用 Windows 事件查看器查找异常。
  • try/catch 块没有捕获异常。 catch all 本身并不能捕获它。 catch(Exception e) 也没有捕捉到它。
  • Jason,正如你所说,我查看了事件日志。我发现以下内容:日志名称:应用程序。资料来源:应用程序挂起。程序 停止与 Windows 交互并被关闭。要查看有关问题的更多信息是否可用,请查看操作中心控制面板中的问题历史记录。当我单击详细信息选项卡并在二进制文件下检查时,它显示“C.r.o.s.s.-.t.h.r.e.a.d ....”这是一个跨线程异常吗?为什么 a) 它没有被 .NET 2.0 抛出并且 b) 它被抛出但没有被 .NET 4.0 捕获?
  • 我研究了事件日志,发现了对 vrfcore.dll 的引用。原来它与“应用程序验证器”有关。我从我的 PC 上卸载了该程序,我的应用程序现在可以正常运行。 .NET 2.0 没有这个问题仍然很奇怪。无论如何,至少我的应用程序可以正常工作。我仍然想知道为什么这个 Application Verifier 程序会导致 .NET 4.0 出现问题
  • 很高兴听到您解决了这个问题(尽管它仍然不是一个完整的解释)。

标签: excel .net-4.0 ado.net .net-2.0 oledb


【解决方案1】:

问题是“应用程序验证程序”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2020-04-17
    • 2011-05-25
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多