我有一段使用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);
}
}
如果我对代码进行轻微修改,会发生几件事情:
如果我删除两个OleDbConnection.Open()的调用,则代码在.NET 2.0下可以正常工作,但在.NET 4.0下会崩溃。
如果我只删除第二个OleDbConnection.Open()的调用,则代码在.NET 2.0和.NET 4.0下都可以正常工作。不幸的是,我需要从两个单独的Excel文件中检索数据,并在每次事件被触发时填充两个单独的DataTable。
如果我使用上面代码中显示的两个OleDbConnection.Open()的调用,则代码在.NET 2.0和.NET 4.0下都可以正常工作,但是当用户点击按钮并运行该过程第二或第三次时,会在.NET 4.0下崩溃。
我的猜测是,.NET 4.0以不同的方式管理连接,而我可能漏掉了一些非常重要的步骤。
请问有谁能告诉我如何编写上述代码,使其在.NET 2.0和.NET 4.0下都可以正常工作?