如何正确关闭连接以访问数据库

本文关键字:访问 数据库 连接 何正确 | 更新日期: 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的想法:

  1. 完成任何事务后关闭连接。

  2. 连接将缓存在连接池=>性能影响不大。

调用GC.Collect()可能不是最好的解决方案,因为此方法会收集所有"垃圾"。您可能会发现使用using关键字非常有用。例如

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();
    // Do work here.
}

就在您的使用块之后,连接对象将被丢弃!

使用连接,msdn

使用关键字,msdn

connection.Close();OleDbConnection.ReleaseObjectPool();

这最终为我解决了

相关文章:
  • 没有找到相关文章