4

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);
    }
}

コードにわずかな変更を加えると、いくつかのことが起こります。

  1. OleDbConnection.Open() への 2 つの呼び出しを削除すると、コードは .NET 2.0 では問題なく動作しますが、.NET 4.0 ではハード クラッシュします。

  2. OleDbConnection.Open() への 2 番目の呼び出しだけを削除すると、コードは .NET 2.0 および .NET 4.0 で正常に動作します。残念ながら、イベントが発生するたびに、2 つの個別の Excel ファイルからデータを取得し、2 つの個別の DataTable に入力する必要があります。

  3. 上記のコードに示すように、OleDbConnection.Open() の両方の呼び出しを使用すると、コードは .NET 2.0 と .NET 4.0 で正常に動作しますが、ユーザーが 2 回目または 3 回目にクリックすると、.NET 4.0 でハード クラッシュが発生します。ボタンをクリックすると、プロシージャが実行されます。

私の推測では、.NET 4.0 は .NET 2.0 とは異なる方法で接続を管理しており、非常に重要な手順がいくつか欠けています。

上記のコードを .NET 2.0 および .NET 4.0 で正常に動作するように記述する方法を教えてください。

4

1 に答える 1

0

問題は「Application Verifier」でした。

于 2012-07-17T20:28:49.617 に答える