Microsoft Enterprise DAAB和关闭连接

时间:2009-05-27 16:08:52

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

有一个问题是来自entlib 3.0的ExecuteReader方法。这是实现事务处理范围的修复,但在处理大量数据与事务时出错。所以他们已经做了一个修复,这个问题导致了这个问题。因此,当您使用ExecuteReader方法时,您必须关闭连接。最好在上面提到的使用块中使用它

答案 2 :(得分:0)

我正在使用Oracle数据库上的DAAB调查泄漏 - 使用Microsoft驱动程序时一切似乎都很好但我在使用Oracle Odp.net提供程序时遇到了问题。 在内部,DAAB使用CommandBehavior枚举来控制ExecuteReader方法的连接生存期,但是使用ExecNonQuery方法的某些东西似乎不对。