当我使用没有OleDBConnection对象的OleDbDataAdapter对象时,为什么我的.NET 2.0应用程序在.NET 4.0下崩溃?

时间:2012-07-11 18:22:48

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

这是使用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不喜欢使用上面的代码吗?

2 个答案:

答案 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");
            }
        }
    }