2013-04-08 10 views

Antwort

10

Wie wäre es mit einem Factory-Ansatz, in der SQLiteConnection-Verbindungszeichenfolge anzugeben?

für z

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;" 
    } 
} 

Der Code ist nicht getestet, aber ich hoffe, Sie auf die Idee kommen, so dass, wenn Sie es verwenden Sie so tun können.

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

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

+1 Die letzte Zeile des Codes ist die Lösung, die ich suchte, vielen Dank! Der Fabrikansatz kann interessant sein, obwohl ich ihn in meinem Fall nicht brauche. –

+1

Ihr Ansatz ist eine interessante Fallstudie in Kombinatorik, angesichts der Anzahl der Parameter in SQLite Verbindungszeichenfolgen erlaubt :) – Mark

1

Hier ist meine weniger als perfekte Lösung:

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) 

Wenn Sie etwas weniger ausführlich kennen, würde ich glücklich sein zu hören, darüber!

6

Die folgende Zeile ist das, was ich suchte, es vielen Dank an Turbot, deren Antwort beinhaltet:

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

Also, warum hast du ihm nicht die Antwort? – Mawg

+0

@Mawg: Du hast Recht. Ich habe es gerade getan :-) –

1

Persistenz von WAL-Modus

„Im Gegensatz zu dem anderen Journaling Modi, PRAGMA journal_mode = WAL ist persistent. Wenn ein Prozess den WAL-Modus einstellt, wird die Datenbank geschlossen und wieder geöffnet, die Datenbank wird im WAL-Modus zurückkommen. "

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

Wenn ich es richtig verstehe, bedeutet dies, dass Sie einmal WAL-Modus für eine Datenbank einstellen können, gibt es keine Notwendigkeit, sie auf jede Verbindung zu setzen.

Sie können es mit dem für SQLite Befehlszeilen-Shell tun: http://www.sqlite.org/sqlite.html