En C #, comment ouvrir une connexion SQLite en mode WAL ?
Voici comment j’ouvre en mode normal:
SQLiteConnection connection = new SQLiteConnection("Data Source=" + file); connection.Open(); // (Perform my query)
Que diriez-vous d’une approche d’usine pour spécifier dans la chaîne de connexion SQLiteConnection?
pour par exemple
public static class Connection { public abstract SQLiteConnection NewConnection(Ssortingng file); } public class NormalConnection : Connection { public override SQLiteConnection NewConnection(Ssortingng file) { return new SQLLiteConneciton("Data Source=" + file); } } public class WALConnection : Connection { public override SQLiteConnection NewConnection(Ssortingng file) { return new SQLLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;" } }
Le code n’est pas testé, mais j’espère que vous pourrez avoir l’idée. Ainsi, lorsque vous l’utiliserez, vous pourrez le faire comme ça.
SQLLiteConnection conWal = new WALConnection(file); conWAL.Open(); SQLLiteConnection conNormal = new NormalConnection(file); conNormal.Open();
La ligne ci-dessous correspond à ce que je cherchais, merci beaucoup à Turbot qui l’a répondu:
new SQLiteConnection("Data Source=" + file + ";PRAGMA journal_mode=WAL;")
Voici ma solution moins que parfaite:
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)
Si vous savez quelque chose de moins verbeux, je serais heureux d’en entendre parler!
Persistance du mode WAL
“Contrairement aux autres modes de journalisation, PRAGMA journal_mode = WAL est permanent. Si un processus définit le mode WAL, puis ferme et rouvre la firebase database, la firebase database reviendra en mode WAL.”
http://www.sqlite.org/wal.html
Si je comprends bien, cela signifie que vous pouvez définir le mode WAL pour une firebase database une fois, il n’est pas nécessaire de le définir à chaque connexion.
Vous pouvez le faire avec le shell en ligne de commande pour SQLite: http://www.sqlite.org/sqlite.html