我有一个控制台应用程序,用于填充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()
我知道这个数据库不是只读的,因为它已经向该数据库写入了数据。此外,应用程序会继续向该数据库填充数据。当仅运行应用程序的一个实例时,我没有复制出错误。
我尝试使用pragma将日志和temp_store都存储在内存中而不是文件中,以防止应用程序之间可能存在的争用,但我仍然遇到了错误。我总是在同一个方法中得到错误,在该方法中第一次插入连接时发生错误。为了给出应用程序的概括性说明,它循环处理案例,收集有关这些案例的信息(不来自SQLite),然后将结果写入SQLite数据库。
我不知道还能尝试什么。
*编辑 我也在使用PRAGMA journal_mode=MEMORY。将数据插入SQLite数据库时,我首先运行BEGIN语句,然后运行一堆插入语句,最后运行END语句。错误发生在第一个插入操作上。