Как открыть соединение SQLite в режиме WAL

В C#, как открыть соединение SQLite в режиме WAL?

Вот как я открываю в обычном режиме:

SQLiteConnection connection = new SQLiteConnection("Data Source=" + file);
connection.Open();
// (Perform my query)

person Nicolas Raoul    schedule 08.04.2013    source источник


Ответы (4)


как насчет фабричного подхода для указания в строке подключения SQLiteConnection?

для например

public static class Connection
{
    public abstract SQLiteConnection NewConnection(String file);
}

public class NormalConnection : Connection 
{
  public override SQLiteConnection NewConnection(String file)
  {
     return new SQLiteConnection("Data Source=" + file);
  }
}

public class WALConnection : Connection 
{
  public override SQLiteConnection NewConnection(String file)
  {
    return new SQLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;"
  }
}

Код не тестировался, но я надеюсь, что вы можете понять идею, поэтому, когда вы его используете, вы можете сделать это.

   SQLiteConnection conWal = new WALConnection(file);
    conWAL.Open();

    SQLiteConnection conNormal = new NormalConnection(file);
    conNormal.Open();
person Turbot    schedule 08.04.2013
comment
+1 Последняя строка вашего кода - это решение, которое я искал, большое спасибо! Фабричный подход может быть интересным, хотя в моем случае он мне не нужен. - person Nicolas Raoul; 08.04.2013
comment
Ваш подход представляет собой интересный пример комбинаторики, учитывая количество параметров, разрешенных в строках подключения SQLite :) - person Mark; 30.05.2014
comment
Это решение не работает для меня. Единственный способ поместить БД в journal_mode=WAL — это выполнить отдельную команду после установления соединения. - person Andrew; 21.05.2020

Строка ниже - это то, что я искал, большое спасибо Turbot, чей ответ включает это:

new SQLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;")
person Nicolas Raoul    schedule 08.04.2013

Вот мое менее совершенное решение:

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

Если вы знаете что-то менее подробное, я был бы рад услышать об этом!

person Nicolas Raoul    schedule 08.04.2013
comment
Я считаю, что это единственный правильный ответ. Приведенные выше ответы, устанавливающие PRAGMA в строке подключения, у меня не сработали. - person Andrew; 21.05.2020

Постоянство режима WAL

«В отличие от других режимов журналирования, PRAGMA journal_mode=WAL является постоянным. Если процесс устанавливает режим WAL, а затем закрывает и снова открывает базу данных, база данных вернется в режим WAL».

http://www.sqlite.org/wal.html

Если я правильно понимаю, это означает, что вы можете установить режим WAL для базы данных один раз, нет необходимости устанавливать его при каждом подключении.

Вы можете сделать это с помощью оболочки командной строки для SQLite: http://www.sqlite.org/sqlite.html

person Alexei Vinidiktov    schedule 15.06.2013