2010-04-21 12 views
7

मैंने कुछ खोज की है और SQLite साइट पर अक्सर पूछे जाने वाले प्रश्न पढ़े हैं, मेरे प्रश्न का उत्तर खोजने में कोई भाग्य नहीं है।क्या एकाधिक डेटाबेस में SQLite समर्थन लेनदेन करता है?

यह बहुत अच्छा हो सकता है कि मेरा डेटाबेस दृष्टिकोण त्रुटिपूर्ण हो, लेकिन फिलहाल, मैं अपने डेटा को एकाधिक SQLite3 डेटाबेस में संग्रहीत करना चाहता हूं, जिसका अर्थ है अलग फाइलें। मैं अपने भ्रष्टाचार के कारण डेटा भ्रष्टाचार के बारे में बहुत चिंतित हूं, या मेरी टेबल में डेटा बदलने के बीच में बिजली आउटेज।

आदेश में डेटा अखंडता को सुनिश्चित करने, मैं मूल रूप से ऐसा करने की जरूरत:

शुरू लेनदेन डेटाबेस # में तालिका (रों) संशोधित 1 डेटाबेस # 2 प्रतिबद्ध, या रोलबैक अगर में तालिका (रों) संशोधित त्रुटि

क्या यह SQLite द्वारा समर्थित है? इसके अलावा, मैं sqlite.net का उपयोग कर रहा हूं, विशेष रूप से नवीनतम जो SQLite 3.6.23.1 पर आधारित है।

अद्यतन

एक और सवाल - यह कुछ लोगों को आम तौर पर उनके इकाई परीक्षण बढ़ेगी है? मैं हमेशा इकाई परीक्षण डेटाबेस, लेकिन इस तरह का कोई मामला कभी नहीं मिला है। और यदि हां, तो आप इसे कैसे करेंगे? ऐसा लगता है कि आपको बूल test_transaction जैसी विधि में एक और पैरामीटर पास करना होगा, और यदि यह सत्य है, तो डेटाबेस एक्सेस के बीच अपवाद फेंक दें। फिर यह सुनिश्चित करने के लिए कॉल के बाद परीक्षण करें कि डेटा के पहले सेट ने इसे अन्य डेटाबेस में नहीं बनाया है। लेकिन शायद यह ऐसा कुछ है जो SQLite परीक्षणों द्वारा कवर किया गया है, और मेरे परीक्षण मामलों में दिखाई देना चाहिए।

+0

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

+0

ठीक है, मुझे लगता है कि यह सबसे अच्छा होगा। उत्तम! – Dave

उत्तर

11

हाँ लेन-देन विभिन्न स्क्लाइट डेटाबेस के साथ काम करता है और यहां तक ​​कि स्क्लाइट और एसक्लसेवर के बीच भी काम करता है। मैंने इसे दो बार कोशिश की है।

कुछ लिंक और जानकारी

यहाँ से

- Transaction between different data sources.

SQLite ADO.NET 2.0 प्रदाता लेनदेन enlistement का समर्थन करता है के बाद से, न केवल यह कई SQLite datasources फैले एक सौदे को करने के लिए संभव है, लेकिन यह भी अन्य डेटाबेस फैले एसक्यूएल सर्वर जैसे इंजन।

उदाहरण:

using (DbConnection cn1 = new SQLiteConnection(" ... ")) 
using (DbConnection cn2 = new SQLiteConnection(" ... ")) 
using (DbConnection cn3 = new System.Data.SqlClient.SqlConnection(" ... ")) 
using (TransactionScope ts = new TransactionScope()) 
{ 
    cn1.Open(); cn2.Open(); cn3.Open(); 
    DoWork1(cn1); 
    DoWork2(cn2); 
    DoWork3(cn3); 
    ts.Complete(); 
} 

एक नया डेटाबेस कैसे संलग्न करें:

SQLiteConnection cnn = new SQLiteConnection("Data Source=C:\\myfirstdatabase.db"); 
cnn.Open(); 

using (DbCommand cmd = cnn.CreateCommand()) 
{ 
    cmd.CommandText = "ATTACH DATABASE 'c:\\myseconddatabase.db' AS [second]"; 
    cmd.ExecuteNonQuery(); 

cmd.CommandText = "SELECT COUNT(*) FROM main.myfirsttable INNER JOIN second.mysecondtable ON main.myfirsttable.id = second.mysecondtable.myfirstid"; 


    object o = cmd.ExecuteScalar(); 

} 
+0

मैं अपनी टोपी लेता हूं। +1! –

+0

मुझे अभी भी कई डेटाबेस में लेनदेन निष्पादित करने के लिए कोड लिखना है, लेकिन मैं इसे सत्यापित करने के करीब आ रहा हूं! :) – Dave

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