2011-12-31 18 views
6

मैं अपने vb.net प्रोग्राम में System.data.sqlite.dll का उपयोग कर रहा हूं। और मेरे जीवन के लिए मैं वाल मोड को सक्रिय करने के लिए कोड को नहीं समझ सकता।System.data.sqlite - सक्रिय वाल जर्नल मोड

क्या मैं डीबी बनाने के बाद या हर नए SQLiteConnection के साथ इस आदेश को सही करता हूं।

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

यह कैसे कि PRAGMA आदेश इस्तेमाल किया जाना चाहिए है:

और यदि ऐसा है तो क्या कोड अभी प्रयोग की जाने वाली तरह कुछ का उपयोग कर im की आवश्यकता होगी?

उत्तर

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 सेट करने की आवश्यकता नहीं है - यह आपके डेटाबेस को बनाने के दौरान इसे एक बार सेट करने के लिए तैयार है। – UGEEN

1

आपको प्रज्ञा को कमांड के रूप में निष्पादित करने की आवश्यकता है।

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

जब तक आप अपने कनेक्शन को खुला रखने, setting this once पर्याप्त होगा।

+0

धन्यवाद, बहुत सराहना की। हालांकि, आमतौर पर कनेक्शन को बंद करना पड़ता है, आम तौर पर प्रविष्टियों के बाद, अद्यतन की ईटी .. क्या इसका मतलब है कि मुझे अपने सम्मिलन, अद्यतन, हटाएं, सबस के साथ इसमें बहुत कुछ शामिल करना होगा? –

+1

अफसोस की बात है, हाँ। यदि यह स्थानीय-केवल डेटाबेस है, तो आवेदन के पूरे जीवन में कनेक्शन को छोड़ने के लिए कोई नकारात्मक पक्ष नहीं होना चाहिए। हम मोबाइल और टैबलेट उपकरणों के साथ हर समय ऐसा करते हैं जिसमें स्थानीय डीबी होता है। –

+0

अच्छा उदाहरण, धन्यवाद। – kwoxer

3

यह मेरा परियोजना (App.config) से एक नमूना कनेक्शन स्ट्रिंग है आप journal mode=WAL निर्दिष्ट कर सकते हैं।

यदि आप कनेक्शन स्ट्रिंग में जर्नल मोड निर्दिष्ट नहीं करते हैं, तो आप डेटाबेस को PRAGMA jounal_mode=WAL क्वेरी निष्पादित करके इसे मैन्युअल रूप से स्विच कर सकते हैं।

संबंधित मुद्दे