0

我注意到我们的一个内部应用程序正在使用 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 回答