这是一个使用 VS 2005 编写的 .NET 2.0 应用程序。它在运行 .NET 2.0 的系统上运行良好,但在运行 .NET 4.0 的系统上会严重崩溃。这是代码的关键部分:
string selectCommand1 = ....
string connectionString1 = ....
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1))
{
try
{
adapter.Fill(table1);
}
catch
{
MessageBox.Show("error");
}
}
string selectCommand2 = ....
string connectionString2 = ....
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connectionString2))
{
try
{
adapter.Fill(table2);
}
catch
{
MessageBox.Show("error");
}
}
同样,它在 .NET 2.0 下工作,在 .NET 4.0 下崩溃
ConnectionStrings 1 和 2 引用不同的 .xls 文件。
我发现解决这个问题的方法是声明和初始化一个 OleDbConnection 类型的字段变量,在 OleDbDataAdapter 的 using 语句之前设置 ConnectionString 属性和 Open() 它。如此:
OleDbConnection connection = new OleDbConnection();
.......
connection.ConnectionString = connectionString1;
connection.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connection))
{
try
{
adapter.Fill(table1);
}
catch
{
MessageBox.Show("error");
}
}
connection.Close();
connection.ConnectionString = connectionString2;
connection.Open();
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand2, connection))
{
try
{
adapter.Fill(table2);
}
catch
{
MessageBox.Show("error");
}
}
很难相信这就是我的应用程序在 .NET 4.0 下硬崩溃(没有错误消息)的原因,但是在一次删除一行代码并一遍又一遍地重新编译后,我发现这是问题的原因.
我很高兴我解决了这个问题,但我对第一个代码不适用于 .NET 4.0 的事实并不满意。
有人可以解释一下为什么 .NET 4.0 不喜欢使用上述代码吗?