0

内部アプリの 1 つが DAAB を使用していて、何らかの接続リークが発生しているようです。次のコードを使用したときにどこかで読んだことを覚えていると思いました:

Database db = DatabaseFactory.CreateDatabase("ConnectionString");
IDataReader rdr = db.ExecuteReader("sproc")

接続が閉じられたので、調査したところ、そうではないようです。私は DAAB にあまり詳しくありません。いつ、何が起こるか知っている人はいますか? また、同じアプリには次のようなクラスがたくさんあります。

public class Example
{
   private Database db;
   public Example ()
   {
      db = DatabaseFactory.CreateDabase("ConnectionString");
   }

   public void Update(object o)
   {
      try
      {
         db.ExecuteNonQuery("sproc", o.parameter);
      }
      catch...
      }
      }
   }
 }

これは最初はちょっとうんざりしているように見えますが、私が言ったように、私はDAABに慣れていません. 接続が DAAB 内で自分自身を閉じていない場合、これらのクラスがリークを引き起こしている可能性はありますか?

4

3 に答える 3

1

entlib 3.0 からの ExecuteReader メソッドに問題があります。トランザクション スコープを実装するために行われた修正ですが、トランザクションで大量のデータを処理するときにエラーが発生しました。そのため、彼らはその修正を行い、この問題はその修正の結果として発生します。そのため、ExecuteReader メソッドを使用するたびに接続を閉じる必要があります。上記のように using ブロック内で使用することをお勧めします

于 2010-07-31T17:16:54.207 に答える
1

データリーダーを廃棄してみましたか? 私はいつもこれを行っており、長引くつながりはありません。

Database db = DatabaseFactory.CreateDatabase("ConnectionString");
using (IDataReader rdr = db.ExecuteReader("sproc")) {
    // Use the data reader
}
于 2009-05-27T16:30:45.280 に答える
0

Oracle データベースで DAAB を使用してリークも調査しています。Microsoft ドライバーを使用するとすべて問題ないように見えますが、Oracle Odp.net プロバイダーを使用すると問題が発生します。内部的には、DAAB は CommandBehavior 列挙型を使用して ExecuteReader メソッドの接続有効期間を制御しますが、ExecNonQuery メソッドのどこかで何かが正しくないようです。

于 2009-05-27T16:20:07.733 に答える