2013-04-08 11 views

risposta

10

come definire un approccio factory per specificare nella stringa di connessione SQLiteConnection?

per es

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

Il codice non è testato, ma spero si può ottenere l'idea, in modo che quando lo si utilizza si può fare così.

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

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

+1 L'ultima riga del codice è la soluzione che stavo cercando, grazie mille! L'approccio alla fabbrica può essere interessante, anche se nel mio caso non ne ho bisogno. –

+1

Il tuo approccio è un caso di studio interessante in combinatoria, dato il numero di parametri consentiti nelle stringhe di connessione SQLite :) – Mark

1

Qui è la mia soluzione meno-che-perfetto:

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) 

Se sapete qualcosa meno prolissa, sarei felice di sentire a proposito!

6

La riga qui sotto è quello che stavo cercando, molte grazie a rombo cui risposta lo include:

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

Quindi, perché non gli hai assegnato la risposta? – Mawg

+0

@Mawg: hai ragione. L'ho appena fatto :-) –

1

persistenza della modalità WAL

"A differenza delle altre modalità di journaling, PRAGMA journal_mode = WAL è persistente Se un processo imposta la modalità WAL, quindi chiude e riapre il database, il database tornerà in modalità WAL. "

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

Se ho ben capito, questo significa che è possibile impostare la modalità WAL per un database, una volta, non c'è bisogno di impostare su ogni connessione.

Puoi farlo con la shell a riga di comando per SQLite: http://www.sqlite.org/sqlite.html

Problemi correlati