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

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

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

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

4 ответов


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

для электронной.г

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

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

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

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

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

    SQLLiteConnection conNormal = new NormalConnection(file);
    conNormal.Open();

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

new SQLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;")

вот мое менее чем идеальное решение:

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)

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


сохранение режима WAL

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

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

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

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