如何删除Access Db的临时ldb文件

我有一个ASP.NET项目。 我正在连接到数据库,然后关闭并处理连接对象。 但是当任何人进入我的网站时,MS Access会创建一个临时的dbname.ldb。 当我想从我的服务器下载我的原始mdb文件时,它将不允许我访问mdb文件。 如果服务器中有ldb文件,我什么也做不了。 它锁定mdb文件,我无法移动它。 所以有什么问题? 我打开连接并关闭它。 那么为什么这个ldb文件在连接关闭后不会自行删除。

如果脚本在关闭之前产生任何类型的错误,则可以保持连接打开。 使用自定义错误500页检查脚本,在文本文件中记录错误,您将看到是否是这种情况。 无论如何,ldb文件没有危险,所以你可以创建一个脚本来每天删除一次。 这是使用MS Access处理Web应用程序的缺点之一。 尝试迁移到MSSQL,如果可以,或者到MySQL,最后可以使用.NET或经典ASP,ADO或ADO.NET与适当的驱动程序没有问题。

IIS中的Web应用程序通过连接池保持连接打开。 如果在IIS设置为终止Web应用程序的时间内没有其他连接,或者您可以重新启动应用程序(并在任何人进入之前复制该文件),IIS应用程序最终将关闭。

这只是一个原因,Access对于这种应用程序来说不是一个很好的数据库选择。

.ldb文件是.mdb Access数据库的锁定文件。 每次打开数据库时,Jet引擎都会创建锁定文件,并在有人连接时保持打开状态。 一旦没有其他客户端连接到数据库,Jet将删除锁定文件。

所以你看到锁文件有两个原因:

  • 有一个开放的连接。
  • 连接断开,无法删除锁定文件。

如果检查服务器的错误日志没有提供任何帮助,请尝试将应用程序中的所有数据库访问记录到文件中:附加有关时间,连接和其他有用调试信息的信息。
这可能是一种快速调试问题的简单方法,可以查看连接保持打开的位置和时间。

或者,您可以查看此CodeProject文章: 在ASP.NET Web应用程序中查找“泄漏”数据库连接 。

您还可能需要考虑连接池 – 当您关闭连接时,c#实际上将其打开一段时间(30秒?60秒?),然后才真正关闭它,以防它可以重复使用。 这可能是一个问题。

删除.ldb文件的一个hacky解决方法是执行以下操作:

  • 制作访问数据库的副本
  • 删除原始访问数据库
  • 删除.ldb文件
  • 将访问数据库的副本重命名为原始数据库的名称。

你需要在关闭和处理连接对象后调用GC.Collect() 🙂