如何正确关闭连接以访问数据库
本文关键字:访问 数据库 连接 何正确 | 更新日期: 2023-09-27 18:27:31
目前我们的代码看起来像这个
public void Close(bool saveChange)
{
if ((_Connection != null) && (_Connection.State == System.Data.ConnectionState.Open))
{
_Connection.Close();
_Connection.Dispose();
_Connection = null;
GC.Collect();
}
}
其中需要GC.Collect()才能正确关闭文件并删除所有.ldb文件。是否可以在不调用GC的情况下关闭db文件并立即删除所有temp.ldb文件?
对于实现IDisposable
的每个类,都应该使用using
-语句来处理对象。在这种情况下,连接也在关闭。
例如:
using(var conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("Pets/Pets.mdb")))
{
conn.open();
// do something with it
}
你还应该阅读这篇文章,因为你使用连接的方式可以改进。经验法则是:始终在同一位置创建、打开、使用和关闭连接,并让ADO.NET连接池管理底层连接。
如果您有一个类在多个入口点中使用数据。你必须保持连接畅通。(因此不能使用使用(Connection x=…){}语句)
您的类还应该继承IDisposable并实现
void Dispose()
{
this.dbConnection.Dispose();
}
dbConnection.Dispose()将负责正常关闭连接,除非您需要执行一些自定义操作(例如注销、保存缓存信息等)
无论如何,我赞成@Tim Schmelter的想法:
完成任何事务后关闭连接。
连接将缓存在连接池=>性能影响不大。
调用GC.Collect()可能不是最好的解决方案,因为此方法会收集所有"垃圾"。您可能会发现使用using
关键字非常有用。例如
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
// Do work here.
}
就在您的使用块之后,连接对象将被丢弃!
使用连接,msdn
使用关键字,msdn
connection.Close();OleDbConnection.ReleaseObjectPool();
这最终为我解决了