2011-01-30 12 views
5

मुझे थोड़ी देर के लिए मेरे एफ-स्पॉट डेटाबेस में समस्याएं आ रही हैं, लेकिन कुछ भी अपंग नहीं है। अब, ऐसा लगता है जैसे मैं करता हूं; मैं एफ-स्पॉट भी लॉन्च नहीं कर सकता, क्योंकि यह स्टार्टअप पर दुर्घटनाग्रस्त हो जाता है। कंसोल की जांच करना, यह संदेश UriFormatException संदेश "सिस्टम.यूरीफॉर्मेट अपवाद: यूआरआई योजना को एक पत्र से शुरू होना चाहिए और इसमें वर्णमाला, अंक, '+', '-' या '।' होना चाहिए। चरित्र। "। यह मोनो 2.4.4.0 पर चल रहा है, माइक्रोसॉफ्ट के रनटाइम नहीं।एक साधारण मोनो/सी # एप्लिकेशन से SQLite3 डेटाबेस पढ़ना?

असल में, मैं यह पता लगाने की कोशिश कर रहा हूं कि कौन सी सटीक डेटा पंक्तियां टूट गई हैं, इसलिए मैं या तो उन्हें सुधार सकता हूं, या एफ-स्पॉट के खिलाफ एक बग रिपोर्ट दर्ज कर सकता हूं। (मैं सीधे डेटाबेस फ़ाइल में चारों ओर दखल दे रहा हूं, जो इस परेशानी का कारण बन सकता है - किसी भी तरह से, ऐसा लगता है कि इसे कड़ी मेहनत से बेहतर कुछ ऐसा करना चाहिए, लेकिन इस पल में मुझे अधिक दिलचस्पी है सटीक कारण से डेटा को ठीक करने में विफलता को थोड़ा अधिक सुन्दर तरीके से क्यों नहीं संभाला जा रहा है।) डेटाबेस एक SQLite3 फ़ाइल है, और इसे मैन्युअल रूप से कमांड लाइन sqlite3 एप्लिकेशन में चला रहा है, मैं तालिका मेटाडेटा के विरुद्ध दोनों का चयन कर सकता हूं डेटा टेबल के रूप में अच्छी तरह से। फिर भी, मुझे एक साधारण परीक्षण अनुप्रयोग से Mono.Data.SqliteClient.SqliteConnection.Open() से एक अनचाहे अपवाद System.ApplicationException: file is encrypted or is not a database मिलता है जो the official guide for SQLite and Mono से कॉपी-पेस्ट के अलावा कुछ भी नहीं है। है

public static void Main(string[] args) { 
    string connectionString = "URI=file:f-spot.photos.db"; 
    IDbConnection dbcon; 
    dbcon = (IDbConnection) new SqliteConnection(connectionString); 
    dbcon.Open(); 
    dbcon.Close(); 
    dbcon = null; 
} 

डेटाबेस फ़ाइल निश्चित रूप से वहाँ है, और काम कर ठीक (sqlite3 ही है: System.Data.dll और Mono.Data.SqliteClient.dll रूप से लिंक हो, मैं यहाँ प्रासंगिक कोड को कॉपी कर रहा हूँ के रूप में अच्छी तरह से संपूर्णता के लिए इसके बारे में कोई शिकायत नहीं)। गुगलिंग मुझे विभिन्न छोटे आकार के डेटाबेस इंजनों की तुलना में बहुत सारे पेजों को नेट करता है, और शायद फ़ाइल पर संकेत SQLite2 डेटाबेस होने पर संकेत देता है। हालांकि, AFAIK मेरे पास मेरे सिस्टम पर कोई SQLite2 लाइब्रेरी नहीं है, और file विशेष रूप से दावा करता है कि फ़ाइल "SQLite 3.x डेटाबेस" है। इतना ही नहीं, एफ-स्पॉट संस्करण 0.3.5 require SQLite 3 से नए हैं, और मैं संस्करण 0.6.2 पर हूं, और अब बहुत समय से रहा हूं। क्या मैं गलत एपीआई का उपयोग करके इसे पढ़ने की कोशिश कर रहा हूं, या किसी भी मौके से डीएसएन गलत है?

किसी भी सुझाव का प्रयास करने की सराहना की जाएगी। निश्चित रूप से मैं डेटा निकालने के लिए sqlite3 का उपयोग कर सकता हूं, इसे टेक्स्ट फ़ाइलों में सहेज सकता हूं, फिर उनको पार्स कर सकता हूं, लेकिन यह अनिश्चितता की परतों की एक और जोड़ी पेश करता है कि मैं वास्तव में एक ही एपीआई के करीब एफ-स्पॉट के रूप में उपयोग करके संभवतः टालना चाहता हूं क्योंकि मैं डेटा तक पहुंच सकता हूं।

उत्तर

4

मुझे लगता है कि आपको विशेष रूप से कनेक्शन स्ट्रिंग में स्क्लाइट इंजन के संस्करण को सेट करने की आवश्यकता है। अपने कनेक्शन स्ट्रिंग स्थिर में "संस्करण = 3" जोड़ने का प्रयास करें। मैंने थोड़ा कोड बदल दिया है, देखें कि यह आपके लिए काम करेगा या नहीं।

public static void Main(string[] args) { 
    string connectionString = "URI=file:f-spot.photos.db,version=3"; //<-- version is set to 3 
    IDbConnection dbcon; 
    dbcon = (IDbConnection) new SqliteConnection(connectionString); 
    dbcon.Open(); 
    dbcon.Close(); 
    dbcon = null; 
} 

अधिक जानकारी के लिए जाँच प्रलेखन here

आशा है कि यह मदद करता है की "कनेक्शन स्ट्रिंग स्वरूप" अनुभाग में, का संबंध

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