在ADO.NET 4.0中处理多个Excel文件的多个连接的正确方法是什么?

时间:2012-07-13 00:38:08

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

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

引起问题的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);
    }
}

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

  1. 如果我删除对OleDbConnection.Open()的两次调用,代码将在.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第二或第三次硬崩溃用户点击按钮的时间,程序就会运行。

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

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

1 个答案:

答案 0 :(得分:0)

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