可能重复:
使用块会关闭数据库连接吗?
以下是db.Close()
不必要的吗?
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close();
}
可能重复:
使用块会关闭数据库连接吗?
以下是db.Close()
不必要的吗?
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close();
}
如果使用 using 子句,是否需要关闭 DbConnection?
不,如果使用 using 子句,是否不需要关闭 DbConnection?
和
是的,这里没有必要,因为当范围using
结束时,连接将处理关闭和释放所有内存的意思。
由于DBConnection
实现了接口,所以在方法中IDisposable
就有了close函数。Dispose
DBConnection
但是,如果某些行在关闭行之后,那么它很有用
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close(); //Useless
}
但在这里它很有用
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
db.Close(); //Useful
// Some more code
}
在这种情况下,你可以做
using (DbConnection db = GetDbConnection())
{
// do data-access stuff
// ...
}
// Some more code which was previously inside using section.
只是为了确保我已经检查了代码:)
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = (DbConnectionOptions) null;
this._poolGroup = (DbConnectionPoolGroup) null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
这是继承自DbConnection的SqlConnection的实现。如您所见,有this.Close()方法:)
据我所知,当Dispose()
方法被调用时,Close()
会自动执行。
所以db.Close();
这里没有必要。
在右大括号处Dispose()
被调用。
我认为在DbConnection
该Dispose
方法中也会检查连接是否关闭。所以不,这可能没有必要,但我个人认为这是一种很好的做法,可以提高可读性,并且不会影响性能,因为Close
会以一种或另一种方式调用。
SqlConnection
从(Derived of DbConnection
) 类的 dispose 实现中提取的代码:
public void Dispose()
{
Dispose(true);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
this.Close();
}
base.Dispose(disposing);
}
using
关键字使用接口IDisposable
。上面的方法是方法实现。它将关闭连接。