これは、VS2005を使用して作成された.NET2.0アプリケーションです。.NET2.0を実行しているシステムでは正常に動作しますが、.NET4.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で動作し、.NET4.0でクラッシュします
ConnectionStrings 1および2は、異なる.xlsファイルを参照します。
この問題を回避する方法は、OleDbConnection型のフィールド変数を宣言して初期化し、ConnectionStringプロパティを設定して、OleDbDataAdapterのusingステートメントの前に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");
}
}
これが私のアプリが.NET4.0でハードクラッシュした(エラーメッセージが表示されなかった)理由であるとは信じがたいですが、コードの行を1つずつ削除して何度も再コンパイルした後、それが問題の原因であることがわかりました。
問題を解決できてうれしいですが、最初のコードが.NET4.0で機能しないという事実に満足していません。
誰かが.NET4.0が上記のようなコードで動作するのを好まない理由を説明できますか?