【问题标题】:Microsoft Enterprise DAAB and Closing ConnectionsMicrosoft Enterprise DAAB 和关闭连接
【发布时间】:2010-10-29 07:59:40
【问题描述】:

我注意到我们的一个内部应用程序正在使用 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 中自行关闭,这些类是否会导致泄漏?

【问题讨论】:

    标签: c# asp.net sql-server-2005 daab


    【解决方案1】:

    entlib 3.0 的 ExecuteReader 方法存在问题。这是为了实现事务范围而进行的修复,但是在使用事务处理大量数据时出现错误。因此,他们已经对此进行了修复,并且该问题是由于该修复而导致的。因此,当您使用 ExecuteReader 方法时,您必须关闭连接。最好在上面提到的 using 块中使用它

    【讨论】:

      【解决方案2】:

      您是否尝试过配置数据阅读器?我总是这样做,没有任何挥之不去的联系。

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

      【讨论】:

        【解决方案3】:

        我也在使用 Oracle 数据库上的 DAAB 调查泄漏 - 使用 Microsoft 驱动程序时一切正常,但在使用 Oracle Odp.net 提供程序时我发现问题。 在内部,DAAB 使用 CommandBehavior 枚举来控制 ExecuteReader 方法的连接生命周期,但 ExecNonQuery 方法的某处似乎不对。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 2019-10-11
          • 2013-10-06
          • 2011-12-11
          • 2012-08-28
          相关资源
          最近更新 更多