2009-05-27 22 views
0

私たちの内部アプリケーションの1つがDAABを使用していて、何らかの接続リークがあるようです。接続はあなたのため閉鎖されたことをMicrosoftエンタープライズDAABとクローズ接続

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

、私は調査し、それはケースのように見ていない:私はあなたが次のコードを使用したときにすることをどこかで読んだ覚えて思いました。私はあまりにもDAABに精通していない、誰が何が起こるかを知っていますか?種類のcringeworthyようだ最初の

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内で閉じないと、これらのクラスがリークを引き起こす可能性がありますか?

答えて

0

Oracleデータベース上でDAABを使用してもリークを調べています - Microsoftドライバを使用しているときはすべてOkですが、Oracle Odp.netプロバイダを使用しているときに問題が発生しています。 内部的には、DAABはCommandBehavior列挙型を使用してExecuteReaderメソッドの接続ライフタイムを制御しますが、ExecNonQueryメソッドのどこかに何かが存在しないようです。

1

データリーダーを廃棄しましたか?私はいつもこれをしていて、何のつながりもありません。

Database db = DatabaseFactory.CreateDatabase("ConnectionString"); 
using (IDataReader rdr = db.ExecuteReader("sproc")) { 
    // Use the data reader 
} 
1

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

関連する問題