Member 12753057 Ответов: 1

[C#] sqlite - как установить режим WAL в sqlite


Windows CE, .NET compact framework 3.5 
Using SQlite Dll File : sqlite-netFx35-binary-PocketPC-ARM-2008-1.0.105.0.zip
"http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki"

Я хочу использовать режим wal. Итак, я написал следующий код.

string sql = "PRAGMA journal_mode = WAL;";
 SQLiteCommand cmd = new SQLiteCommand(sql, cnn);
 var journalMode = cmd.ExecuteScalar();


Но journalMode был установлен в положение "удалить".

Что я уже пробовал:

Другая настройка, например "journal_mode = OFF", в порядке.
И когда я пытаюсь открыть файл базы данных, настроенный на режим wal, возникает ошибка.
"file is encrypted or is not a database\r\nfile is encrypted or is not a database

В чем проблема?

1 Ответов

Рейтинг:
1

Maciej Los

Как Документация SQLite[^] утверждает, что доступ к базе данных в режиме ведения журнала WAL возможен только с помощью SQLite версии 3.7.0 (2010-07-21)или более поздней.

Вывод: вы должны использовать более новая версия SQLite[^] база данных.

[РЕДАКТИРОВАТЬ]
Чтобы иметь возможность открыть базу данных SQLite в режиме WAL, вы должны открыть ее с помощью специальной строки подключения:

SQLiteConnection connection = new SQLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;")
connection.Open();
using (var command = new SQLiteCommand(sqliteConnection))
{
    command.CommandText = "Your query string here";
    command.ExecuteNonQuery();
}


Member 12753057

Dll-файл SQlite, который я использую, был описан следующим образом: (этот двоичный пакет содержит все двоичные файлы для версии PocketPC пакета System.Data.SQLite 1.0.105.0 (3.18.0). Включенные собственные двоичные файлы должны работать на всех поддерживаемых ARM-версиях Windows CE до Windows Embedded Compact 2013. На .Требуется чистый компакт фреймворк 3.5 стоит.)

Означает ли это, что версия SQLite включает версию 3.18.0?

Я не могу найти другую версию SQLite, которая поддерживала Windows CE(.NET Compact framework 3.5)

Maciej Los

Похоже, пакет драйверов SQLite для .net framework 3.5 в порядке, но версия базы данных старше 3.7. вы должны создать правильную версию базы данных: sqlite_create_database.
Подробнее: Формат Файла Базы Данных

Member 12753057

Моя серверная версия базы данных-3.18.0.
Является ли ваша "версия базы данных" версией сервера?

Я создаю базу данных по нижеприведенному коду.

используя (ВАР Эн = новый SQLiteConnection("источник данных= база данных testdb.дБ; версия=3"))
{
телеканал CNN.Открыть();
cnn. Execute (@"create table testTable ( col1 int )");
}


(+)
Я проверяю, что "SQLiteConnection.SQLiteVersion " тоже 3.18.0

Maciej Los

SQLite - это не серверная база данных.

Member 12753057

SQLiteConnection.SQLiteVersion, который я использую, - это 3.18.0.
Разве версия 3.18.0 не была выпущена позже версии 3.7.0?