数据库文件已锁定

时间:2012-01-20 13:11:11

标签: c# web-services sqlite

我正在使用的程序从Web服务获取数据,将数据添加到数据库,删除和更新。 但有时当我运行我的应用程序时,所有操作都是成功的,但有时当我想添加,删除或更新数据时,我会收到此错误。

  

服务器无法处理请求。 --->数据库文件已锁定   数据库被锁定

我无法理解同一个程序在某个时间工作正常,但在某个时候,程序会给出这个消息。

3 个答案:

答案 0 :(得分:5)

SqlLite不允许两个线程同时使用数据库。

解决问题的最简单方法是在所有数据库调用周围使用lock语句。

答案 1 :(得分:4)

有一个名为SysInternals的优秀软件包。其中一个组件是Process Monitor(procmon)。使用它来检查锁定数据库文件的应用程序,以及应用程序的2个实例是否“争抢”锁定数据库文件。

在Sqlite中,多个进程可以从DB文件中读取,但只允许一个进程在特定时间进行更改(INSERT / UPDATE / DELETE)。如果多个进程在同一时间尝试更改数据库,则会出现此错误。您可以使用Mutex在访问数据库的进程之间进行同步。

BTW,sqlite文档建议避免使用多个线程中的数据库。为了确保只有一个线程可以同时访问数据库,您可以创建一个静态类,它将与数据库进行所有交互,并在此类中使用锁定语句,以避免同时从多个线程访问数据库。

答案 2 :(得分:3)

您是否使用基于文件的数据库,如Access?

数据库文件总是被锁定(几乎在所有数据库系统中),请尝试停止数据库服务来解锁文件。