Файл базы данных заблокирован - PullRequest
5 голосов
/ 20 января 2012

программа, над которой я работаю, получает данные из веб-службы, добавляет данные в базу данных, удаляет и обновляет.Но иногда, когда я запускаю свое приложение, все действия выполняются успешно, но иногда, когда я хочу добавить, удалить или обновить данные, я получаю эту ошибку.

Серверу не удалось обработать запрос.---> Файл базы данных заблокирован. База данных заблокирована.

Я не могу понять, что одна и та же программа иногда работает нормально, но иногда сама программа выдает это сообщение.

Ответы [ 3 ]

5 голосов
/ 20 января 2012

SqlLite не позволяет двум потокам использовать базу данных одновременно.

Самый простой способ решить эту проблему - использовать оператор lock для всех вызовов базы данных.

4 голосов
/ 20 января 2012

Существует отличный пакет под названием SysInternals. одним из компонентов внутри является Process Monitor (procmon). Используйте его для того, чтобы проверить, какое приложение блокирует ваши файлы базы данных, и если 2 экземпляра вашего приложения «борются» за получение блокировки файлов БД.

В Sqlite несколько процессов могут читать из файлов БД, но только одному разрешено вносить изменения (INSERT / UPDATE / DELETE) в определенное время. если более чем один процесс пытается изменить БД одновременно, вы получите эту ошибку. Вы можете использовать Mutex для синхронизации между процессами, обращающимися к БД.

Кстати, документация sqlite рекомендует избегать использования базы данных из нескольких потоков. Чтобы гарантировать, что только один поток будет одновременно обращаться к БД, вы можете создать статический класс, который будет выполнять все взаимодействие с базой данных и использовать операторы блокировки внутри этого класса, чтобы избежать одновременного доступа к БД из нескольких потоков.

3 голосов
/ 20 января 2012

Используете ли вы файловую базу данных, например Access?

Файл базы данных всегда заблокирован (почти во всех системах баз данных), попробуйте остановить службу базы данных, чтобы разблокировать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...