这是使用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不喜欢使用上面的代码吗?
答案 0 :(得分:3)
问题是“应用程序验证程序”。卸载它解决了这个问题。
答案 1 :(得分:2)
在原始代码中(没有connection.open),您是否在调用adapter.Fill(table1)
之前初始化了表格?
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommand1, connectionString1))
{
using (System.Data.DataTable table1 = new System.Data.DataTable()) {
try
{
adapter.Fill(table1);
}
catch
{
MessageBox.Show("error");
}
}
}