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

时间:2009-06-18 21:37:56

标签: c# asp.net ms-access ado.net jet

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

6 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

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

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

或者,您可以查看此CodeProject文章:Find "Leaked" Database Connections in ASP.NET Web Applications

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:-1)

关闭并处置连接对象后,您需要调用 GC.Collect() :)