У меня есть консольное приложение, которое заполняет базу данных SQLite. Когда приложение выполняется само по себе, я не получаю никаких ошибок. Если я запускать несколько экземпляров приложения, где каждое приложение находится в отдельной папке и каждый заселяет свою собственную базу данных, я иногда получаю следующее исключение:SQLite пытается написать ошибку базы данных только для чтения
System.Data.SQLite.SQLiteException (0x80004005): Attempt to write a read-only database
attempt to write a readonly database
at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
Я знаю, что DB не только для чтения, потому что он уже записал данные в эту базу данных. Кроме того, приложение продолжает работу и будет продолжать заполнять данные в эту базу данных. Я не воспроизвел ошибку, когда работает только один экземпляр приложения.
Я попытался использовать прагму, чтобы иметь как журнал, так и temp_store в памяти вместо файла в случае, если между ними есть какая-то разногласия, но я все равно получаю ошибку. Я всегда получаю ошибку в том же методе, который впервые вставляется в соединение. Чтобы дать общее представление о том, что делает приложение, оно охватывает все случаи, собирает информацию об этих случаях (не из SQLite), а затем записывает результаты в базу данных SQLite.
Я не знаю, что еще попробовать.
* edit Я также использую PRAGMA journal_mode = MEMORY. При вставке данных в базу данных SQLite я сначала запускаю оператор BEGIN, а затем кучу вставок перед оператором END. Ошибка возникает при первой вставке.
_ «Я попытался использовать прагму, чтобы иметь как журнал, так и temp_store в памяти вместо файла, если там может быть какая-то разногласия между приложениями». Там не будет. Как вы открываете базу данных? Является ли папка базой данных доступной для записи? –
Да, папка, в которой находится база данных, может быть записана. Большинство итераций правильно вставляют данные в базу данных. Я открываю базу данных только через инструкцию using вокруг SQLiteConnection. – UWSkeletor