我记得我在哪里读到过,当你使用下面的代码时:
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中的连接没有自行关闭,这些类会导致泄漏吗?
发布于 2009-05-27 16:30:45
您是否尝试过处理数据读取器?我总是这样做,没有任何挥之不去的联系。
Database db = DatabaseFactory.CreateDatabase("ConnectionString");
using (IDataReader rdr = db.ExecuteReader("sproc")) {
// Use the data reader
}发布于 2010-08-01 01:16:54
来自entlib3.0的ExecuteReader方法有一个问题。这是一个为实现事务作用域而做的修复,但在使用事务处理大量数据时出现了错误。所以他们已经对此进行了修复,这个问题是由于修复而导致的。因此,无论何时使用ExecuteReader方法,都必须关闭连接。更好的做法是在上面提到的using块中使用它
发布于 2009-05-27 16:20:08
我也在调查一个在Oracle数据库上使用DAAB的泄漏事件--在使用微软驱动程序时,一切似乎都很正常,但在使用Oracle Odp.net提供程序时,我看到了一些问题。DAAB在内部使用CommandBehavior枚举来控制ExecuteReader方法的连接生存期,但是ExecNonQuery方法似乎有些地方不太对劲。
https://stackoverflow.com/questions/916622
复制相似问题