2013-02-26 128 views
6

ठीक है मैं SQLite का उपयोग कर रहा हूं लेकिन जब मैं संभवतः 10k + कमांड [.sql फ़ाइल] को गैर क्वेरी निष्पादित करना शुरू करता हूं। मुझे लगता है कि यह बहुत धीमी है कि डेटाबेस में जानकारी जोड़ने के लिए 10min + तक लग सकता है।SQLite बहुत धीमा ExecuteNonQuery

वैसे भी यह मेरा ExecuteNonQuery कोड है।

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    cnn.Close(); 
    return rowsUpdated; 
} 

मुझे आशा है कि वहाँ एक रास्ता बस इसे सेकंड लग खत्म करने के लिए बनाने के लिए है।

+2

शायद आपकी समस्या आपकी समस्या में है? – Fox32

+2

मुझे संदेह है कि यह एक .sql स्क्रिप्ट –

+1

से सीएमडीएस में बहुत आसान इंसर्ट है क्या आपने उन्हें प्रारंभ-प्रतिबद्ध कथन में लपेट लिया है? –

उत्तर

4

SQLite के साथ यह बात यह है कि में लेन-देन में कमांड-अपडेट-डिलीट कमांड हैं अन्यथा यह दर्दनाक रूप से धीमा हो जाएगा। आप या तो .NET डेटा प्रदाता में बनाए गए लेनदेन समर्थन के साथ ऐसा कर सकते हैं या जब से आप एक .sql फ़ाइल पढ़ रहे हैं तो आप पहली पंक्ति begin transaction और अंतिम पंक्ति commit transaction बना सकते हैं। किसी भी तरह से काम करना चाहिए।

यदि आप इसे .sql फ़ाइल में करना चाहते हैं तो यह ऐसा दिखाई दे सकता है।

begin transaction; 

insert into ...; 
update ...; 
delete ...; 

commit transaction; 

या यदि आप इसे कोड में करते हैं तो यह ऐसा दिखाई देगा।

public int ExecuteNonQuery(string sql) 
{ 
    var cnn = new SQLiteConnection(_dbConnection); 
    cnn.Open(); 
    var transaction = cnn.BeginTransaction(); 
    var mycommand = new SQLiteCommand(cnn) {CommandText = sql}; 
    mycommand.Transaction = transaction; 
    int rowsUpdated = mycommand.ExecuteNonQuery(); 
    transaction.Commit(); 
    cnn.Close(); 
    return rowsUpdated; 
} 
+0

आपके पास मेरा कोड ऊपर है जो आप अपने उत्तर को संपादित कर सकते हैं जिसके साथ आप इंगित कर रहे हैं। क्योंकि जब मैंने .sql फ़ाइल में प्रारंभिक लेनदेन और कॉमिट लाइनों को जोड़ा, तो मुझे SQL तर्क त्रुटि मिली –

+0

मैंने उन पंक्तियों को .sql फ़ाइल की शुरुआत और समाप्ति पंक्तियों में जोड़ा लेकिन मुझे लगता है कि यह कुछ भी नहीं करता है, अन्यथा क्वेरी अब जमे हुए है –

+0

@RuneS: हम्म ... यह अजीब है क्योंकि यह बिल्कुल ठीक है कि मैं इसे कैसे करता हूं और यह ठीक काम करता है। पहली बार एसक्लाइट से आपको क्या त्रुटि मिली? –