LoginSignup
1
0

More than 3 years have passed since last update.

SQLiteでReadWrite設定にしてあるのに書き込みに失敗する

Posted at

タイトルのような問題が発生し、解決したので備忘録として残しておく。

問題

Microsoft.Data.Sqliteを使ってSQLiteの対象のテーブルに書き込みを行う際に、以下のようなExceptionが発生していた。

sqlite attempt to write a readonly database

データベースのMode設定(SqliteConnectionStringBuilder.Mode)はReadWriteに設定済である。

原因

原因としては、Cacheの設定(SqliteConnectionStringBuilder.Cache)の設定がSharedになっていたこと。
MicrosoftのDocumentをみると以下のような記載がある。

Shared : Shared-cache mode. Connections share a cache. This mode can change the behavior of transaction and table locking.

おそらく、タスクがこのDatabaseを書き込みしている間はテーブルがロックされてしまう。
そのため、別のタスクが書き込みをしようとした場合にReadOnlyとみなされてしまい、上記のようなExceptionが発生したと思われる。

解決策

Cacheの設定(SqliteConnectionStringBuilder.Cache)の設定をprivateにする。
こうするごとにCacheがタスクごとに作成され、テーブルのロックが発生しない。(今のところ)

Cache=Defaultでもよいかもしれないが、Defaultがどのような動作を行うかDocumentに記載がないためひとまずPrivateに設定しておく。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0