2011-12-31 36 views
6

私のvb.netプログラムでSystem.data.sqlite.dllを使用しています。そして私の人生の間、私はWALモードを有効にするコードを理解することはできません。System.data.sqlite - WALジャーナルモードを有効にする

DBを作成した直後または新しいSQLiteConnectionを実行するたびにこのコマンドを有効にしますか?

cnn As New SQLiteConnection(String.Format("Data Source={0}\{1};PRAGMA jounal_mode=WAL;", Application.StartupPath, DBName)) 

PRAGMAコマンドを使用する必要があることをどのようにこれです:

とコードが今使用する必要があるだろうかもしそうならではのようなものを使用してイム?

答えて

8

あなたはいつもあなたのために仕事をするSQLiteConnectionStringBuilderクラスを使用することができます。

<connectionStrings> 
    <add name="SQLiteDb" providerName="System.Data.SQLite" connectionString="Data Source=data.sqlite;Version=3;Pooling=True;Synchronous=Off;journal mode=Memory"/> 
    </connectionStrings> 

代わりのjournal mode=Memory

SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder(); 
    connBuilder.DataSource = filePath; 
    connBuilder.Version = 3; 
    //Set page size to NTFS cluster size = 4096 bytes 
    connBuilder.PageSize = 4096; 
    connBuilder.CacheSize = 10000; 
    connBuilder.JournalMode = SQLiteJournalModeEnum.Wal; 
    connBuilder.Pooling = true; 
    connBuilder.LegacyFormat = false; 
    connBuilder.DefaultTimeout = 500; 
    connBuilder.Password = "yourpass"; 


    using(SQLiteConnection conn = new SQLiteConnection(connBuilder.ToString())) 
    { 
    //Database stuff 
    } 
+0

すべての接続にWALを設定する必要はないことに注意してください。データベースの作成中にWALを一度設定するだけで十分です。 – UGEEN

1

プラグマをコマンドの非クエリーとして実行する必要があります。

Using cmd As SQLiteCommand = cnn.CreateCommand() 
    cmd.CommandText = "PRAGMA journal_mode=WAL" 
    cmd.ExecuteNonQuery() 
End Using 

は、限り、あなたはオープン接続を維持するよう、setting this onceは十分でしょう。

+0

ありがとうございました。しかし、私は接続を頻繁に閉じる傾向があります。通常、挿入後には、UpdateのEct .. それは私がかなり挿入、更新、削除、サブとそれを含める必要がありますか? –

+1

悲しいことに、はい。ローカル専用データベースの場合は、アプリケーションの使用期間中、接続を開いたままにしておくことには欠点はありません。ローカルのDBを持つモバイルデバイスやタブレットデバイスを使用して、これを常に実行します。 –

+0

良い例、ありがとう。 – kwoxer

3

これは私のプロジェクト(App.configファイル)からサンプルの接続文字列です。 journal mode=WALと指定できます。

接続文字列にジャーナルモードを指定しない場合は、PRAGMA jounal_mode=WALクエリをデータベースに実行して手動で切り替えることができます。

関連する問題