6

バックエンドとして .mdb ファイルを使用するマルチスレッド (.NET Framework 3.5 SP1 WinForms) デスクトップ アプリケーションを数時間 (Win7 64 ビットで最大 6 時間、WinXP で最大 24 時間) 実行した後、次のランタイム エラーが発生します。

例外 ->不明なエラー

スタックトレース ->

System.Data.OleDb.OleDbConnectionInternal..ctor (OleDbConnectionString コンストラクター、OleDbConnection 接続)
で System.Data.OleDb.OleDbConnectionFactory.CreateConnection (DbConnectionOptions オプション、オブジェクト poolGroupProviderInfo、DbConnectionPool プール、DbConnection owningObject) で

System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection、DbConnectionPoolGroup プール グループ) で

System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection) で

System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection outerConnection、DbConnectionFactory connectionFactory) で

System.Data.OleDb.OleDbConnection.Open() で

NetworkManager.SearchInputFileHandler.GetInputRows (SearchProgramTypeEnumeration programType、Int32 startRowNum、Int32 rowsQty、ブール setupInProgress、ブール filterOutUninitializedRows) で

これは OleDbProvider のバグのようです。

そのようなことを見たり経験したりしたことはありますか?

環境:

(1) 私はもっぱら使用します

using (OleDbConnection cnn = new OleDbConnection("{{mymdbConnectionStringHere}}")) {

cnn.Open();

...

}

(2) 一部の select SQL 式で IN 句を使用して、外部 MDB テーブルを指しています。

問題はケース(2)によって引き起こされると思います。これはまだ確認すべき仮説ですが (アプリケーションのコア コードでいくつかのコード修正が必要であり、修正する価値があるか、MS SQL バックエンドに切り替えたほうがよいと考えています)。

ありがとうございました。

4

3 に答える 3

4

この問題の解決策やその他の安定した回避策を見つけることに進展はありましたか?

Excelファイルを読み取るASP.NETアプリケーションでも同様の問題があります。多くのユーザーがサーバー側で異なる XLS ファイルを処理しようとする実稼働環境でのみ表示されます。夜間に IIS サービスをリサイクルした後、JET エンジンをハングさせる (Excel を開くための) 約 200 の要求があります。問題は、後続の試行がすべて失敗するため、再試行ロジックがあまり役に立たないことです。IIS をリセットするだけで問題が解決します。

私が行った調査から、取るべきいくつかのオプションがあります。

  1. XLS ファイルを読み取るために他のライブラリに切り替えます: Excel OLE オートメーション - サーバーに Excel をインストールする必要があり、多くの要求があると受け入れられない Excel プロセスの多くのインスタンスが作成されます。サードパーティのライブラリ - 無料のものはありますか?
  2. エクセルの処理を別工程に移す。XML などの他のフォーマットとデータを交換します。
  3. ある種のスマートな処理を使用して、プロセスで行われる OLEDB のオープンとクローズの数を制御します。

何かご意見は?

于 2011-01-14T21:26:58.190 に答える
1

サンプル テスト アプリケーションを作成しました。この問題は、.NET System.Data.OleDb の内部のどこかにあるバグが原因です。

テスト VS2008 SP1 ソリューションは、System.Data.OleDb バグ デモンストレーション サンプルで公開されています。

于 2010-10-29T17:49:23.267 に答える