C# 如何删除Access Db';s临时ldb文件
我有一个ASP.NET项目。我正在连接数据库,然后关闭并处理连接对象。但当有人进入我的网站时,MS Access会创建一个临时dbname.ldb。当我想从服务器下载我的原始mdb文件时,它不允许我访问mdb文件。若服务器中有ldb文件,我将无法执行任何操作。它正在锁定mdb文件,我无法移动它。那有什么问题?我正在打开和关闭连接。那么,为什么这个ldb文件在连接关闭后不删除自身呢。如果脚本在关闭连接之前产生任何类型的错误,那么连接可以保持打开状态。使用自定义的错误500页面检查脚本,该页面将错误记录在文本文件中,您将看到是否是这种情况。无论如何,ldb文件并不危险,因此您可以创建一个脚本,每天删除它们一次左右。这是使用MS Access运行web应用程序的缺点之一。如果可以的话,尝试迁移到MSSQL或MySQL,最后一个可以从.NET或经典ASP使用,ADO或ADO.NET与适当的驱动程序没有问题。这个C# 如何删除Access Db';s临时ldb文件,c#,asp.net,ms-access,ado.net,jet,C#,Asp.net,Ms Access,Ado.net,Jet,我有一个ASP.NET项目。我正在连接数据库,然后关闭并处理连接对象。但当有人进入我的网站时,MS Access会创建一个临时dbname.ldb。当我想从服务器下载我的原始mdb文件时,它不允许我访问mdb文件。若服务器中有ldb文件,我将无法执行任何操作。它正在锁定mdb文件,我无法移动它。那有什么问题?我正在打开和关闭连接。那么,为什么这个ldb文件在连接关闭后不删除自身呢。如果脚本在关闭连接之前产生任何类型的错误,那么连接可以保持打开状态。使用自定义的错误500页面检查脚本,该页面将错误
.ldb
文件是.mdb
Access数据库的锁定文件。每次打开数据库时,Jet引擎都会创建锁文件,并在有人连接时将其保持打开状态。
一旦没有其他客户端连接到数据库,Jet就会删除锁文件
因此,您看到锁文件的原因有两个:
- 有一个开放的连接
- 连接已断开,无法删除锁定文件
这可能是一种快速调试问题并查看连接何时何地保持打开状态的简单方法
可选的,你可以看看这个代码项目文章:
你也可能想考虑连接池——当你关闭一个连接时,C实际上在它关闭之前保持它打开一段时间(30秒?60秒),以防它被重新使用。这可能是一个问题。IIS中的web应用程序通过连接池保持连接打开。如果在IIS设置为终止web应用程序的时间内没有其他连接,或者您可以重新启动应用程序(并在任何人进入之前复制文件),则IIS应用程序最终将关闭这只是Access不是此类应用程序的良好数据库选择的一个原因。删除.ldb文件的一个棘手的解决方法是执行以下操作:
- 制作access数据库的副本
- 删除原始access数据库
- 删除.ldb文件
- 将access数据库的副本重命名为原始数据库的名称
GC.Collect()
不会释放任何数据库锁。您只需要显式调用Dispose()
(包括使用块)即可-调用Close()
完全是多余的,因为Close
和Dispose
执行完全相同的操作。