这是一个使用 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 不喜欢使用上面这样的代码吗?
最佳答案
问题出在“应用程序验证程序”。卸载它解决了问题。
关于.net - 当我使用没有 OleDBConnection 对象的 OleDbDataAdapter 对象时,为什么我的 .NET 2.0 应用程序在 .NET 4.0 下崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11438952/