Sqlite выдает ошибку только после выполнения метода SQLiteCommand ExecuteReader () - PullRequest
0 голосов
/ 01 ноября 2018

У меня проблема с следующей ошибкой, возникающей при каждом закрытии объекта 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

...