Mam aplikację konsoli, która zapełnia bazę danych SQLite. Gdy aplikacja działa samodzielnie, nie dostaję żadnych błędów. Jeśli uruchomić wiele instancji aplikacji, gdzie każda aplikacja jest w osobnym folderze i każdy wypełnia swoją własną bazę będę od czasu do czasu pojawia się następujący wyjątek:SQLite próbuje zapisać błąd tylko do odczytu bazy danych
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()
wiem DB nie jest tylko do odczytu, ponieważ już zapisał dane do tej bazy danych. Ponadto aplikacja będzie kontynuowana i będzie nadal zapełniać dane w tej bazie danych. Nie powtórzyłem błędu, gdy działa tylko jedna instancja aplikacji.
Próbowałem użyć pragmy, aby mieć zarówno dziennik, jak i temp_store w pamięci, zamiast w pliku, na wypadek, gdyby mógł wystąpić konflikt między aplikacjami, ale nadal dostaję błąd. Zawsze otrzymuję błąd w tej samej metodzie, co jest pierwszym przypadkiem, w którym wstawiłbym się do połączenia. Aby dać ogólne pojęcie o tym, co robi aplikacja, zapętla się nad przypadkami, zbiera informacje o tych przypadkach (nie z SQLite), a następnie zapisuje wyniki w bazie danych SQLite.
Nie wiem, co jeszcze można spróbować.
* edycja Używam również PRAGMA journal_mode = MEMORY. Podczas wstawiania danych do bazy danych SQLite najpierw uruchamiam instrukcję BEGIN, a następnie kilka wstawek przed instrukcją END. Błąd występuje na pierwszej wstawce.
_ "Próbowałem użyć pragmy, aby mieć zarówno dziennik, jak i temp_store w pamięci zamiast w pliku, na wypadek, gdyby mógł wystąpić konflikt pomiędzy aplikacjami" _ Nie będzie. Jak otwierasz bazę danych? Czy folder, w którym baza danych jest zapisywalny? –
Tak, folder, w którym znajduje się baza danych, można zapisać. Większość iteracji poprawnie wstawia dane do bazy danych. Otwieram bazę danych za pomocą instrukcji using wokół SQLiteConnection. – UWSkeletor