4

我有一段使用 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. 如果我同时使用对 OleDbConnection.Open() 的调用,如上面的代码所示,该代码将在 .NET 2.0 和 .NET 4.0 中正常工作,但在用户第二次或第三次单击按钮,程序运行。

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

有人可以告诉我应该如何编写上述代码,使其在 .NET 2.0 和 .NET 4.0 下可以正常工作吗?

4

1 回答 1

0

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

于 2012-07-17T20:28:49.617 回答