2011-12-31 3 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

pragma를 명령이 아닌 쿼리로 실행해야합니다.

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

연결을 유지하는 한 setting this once이면 충분합니다.

+0

고맙습니다. 그러나 일반적으로 삽입 후 업데이트를 처리하는 경향이 있습니다. 내 Insert, Update, Delete, subs와 함께 포함해야한다는 것을 의미합니까? –

+1

슬프게도 그렇습니다. 로컬 전용 데이터베이스 인 경우 애플리케이션의 수명 내내 연결을 열어 두는 것이 좋지 않습니다. 우리는 항상 로컬 DB가있는 모바일 및 태블릿 기기로이 작업을 수행합니다. –

+0

좋은 예, 고마워. – kwoxer

3

이 내 프로젝트 (의 App.config)에서 샘플 연결 문자열입니다 journal mode=WAL을 지정할 수 있습니다.

연결 문자열에 저널 모드를 지정하지 않으면 데이터베이스에 PRAGMA jounal_mode=WAL 쿼리를 실행하여 수동으로 전환 할 수 있습니다.