У меня проблема с следующей ошибкой, возникающей при каждом закрытии объекта SQLiteConnection.
...
...
using (SQLiteConnection conn = new SQLiteConnection(@"Data source=/Database.db;Version=3;"))
{
using (SQLiteCommand command = new SQLiteCommand(conn))
{
conn.Open();
command.CommandText = "PRAGMA busy_timeout=5000;";
command.ExecuteNonQuery();
command.CommandText = query;
using (SQLiteDataReader reader = command.ExecuteReader())
{
table.Load(reader);
}
}
}
...
...
Когда объект conn закрывается в блоке using (), он всегда выдает эту ошибку:
"Ошибка SQLite (2058): os_win.c: 42822 (0) winUnlockReadLock (Database.db) - операция успешно завершена."
Теперь эта ошибка возникает только из порта отладки, который я использую. Он не останавливается в режиме отладки и не генерирует исключение и продолжает работу в порядке.
Однако эта ошибка возникает ТОЛЬКО при использовании command.ExecuteReader (). Если я просто открываю и закрываю соединение и команду, это нормально и не возвращает ошибку.
База данных находится в режиме WAL, но добавляется 'PRAGMA journal_mode = WAL;' чтобы строка подключения ничего не делала.
Между тем, у меня есть проект на языке C, использующий ту же базу данных WAL, и эта ошибка никогда не возникает.
Есть ли в пакете System.Data.Sqlite что-то, чего мне не хватает? Возможно, какой-то способ сказать, что он использует базу данных WAL или что-то в этом роде? Подобные примеры использования этих классов похожи на мои.
Я использую sqlite3.dll версии 3.24.0 со своей оболочкой для equivelant здесь (Top Link): winCE .net Wrapper Это все на платформе winCE 2013