2013-06-25 4 views
10

से पहले काम करने के बावजूद नेटवर्क फ़ाइल को प्रोग्रामिक रूप से नहीं खोल सकता है, मैंने एक SQLite डेटाबेस फ़ाइल खोलने के लिए नीचे दिए गए कोड का उपयोग किया है जो लगभग एक वर्ष से अधिक समय तक नेटवर्क कंप्यूटर पर बैठता है। अचानक सुबह, मैं प्रोग्राम को प्रोग्रामेटिक रूप से खोलने में सक्षम नहीं हूं।SQLite:

private Boolean Connect(String strPathFile) 
{ 
    // Initialize the connection object. 
    this.DbConnection = null; 

    try 
    { 
     // DATABASE: Create the connection string and set the settings. 
     String strConnection = @"Data Source=" + strPathFile + @";Version=3;"; 

     // DATABASE: Connect to the database. 
     this.DbConnection = new SQLiteConnection(strConnection); 
     this.DbConnection.Open(); 

     return true; 
    } 

    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 

    return false; 
} 

फ़ाइल प्रपत्र "\ सर्वर \ ShareName \ FileName.db" (कम डबल कोट्स) में एक नेटवर्क संसाधन है।

यहां दिलचस्प बात है। SQLite व्यवस्थापक को नेटवर्क डेटाबेस फ़ाइल, कोई नहीं, और बार-बार खोलने में कोई समस्या नहीं है। मैं स्थानीय रूप से फ़ाइल खोल सकता हूं। मैंने फ़ाइल को अपने स्थानीय ड्राइव पर कॉपी किया और बस विजुअल स्टूडियो 2012 (वीएस2012) के अंदर पथ बदल दिया।

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

मैंने अनुमतियों पर एक बार फिर से जांच की है और सभी के पास पूर्ण नियंत्रण है और साथ ही सर्वर के उपयोगकर्ताओं के पास सुरक्षा अनुमतियों और शेयर अनुमतियों पर पूर्ण नियंत्रण है। मैंने फ़ोल्डर और फ़ाइल की जांच की, और अनुमतियां समान हैं। मुझे बहुत उम्मीद थी, क्योंकि SQLite व्यवस्थापक फ़ाइल खोल सकता है। सर्वर में फ़ायरवॉल सेट अप नहीं है, विंडोज फ़ायरवॉल या अन्यथा। मैंने आज सुबह भी दोबारा जांच की। फिर, एसक्यूएलएट प्रशासक ने इसके बारे में शिकायत की होगी।

मैंने फ़ाइल एक्सप्लोरर का उपयोग कर नेटवर्क ड्राइव पर फ़ाइल की एक प्रति बनाकर लेखन सत्यापित किया। इसमें कोई समस्या नहीं थी।

सेवर एक विंडोज सर्वर 2003 है। मैं विंडोज 7 पेशेवर 64-बिट का उपयोग कर रहा हूं।

मैंने डेटाबेस को केवल पढ़ने के लिए मोड खोलने का प्रयास किया, लेकिन यह भी असफल रहा। मैं उस व्यवहार की उम्मीद कर रहा था। SQLite व्यवस्थापक अभी भी अच्छी तरह से काम करता है।

मैं SQLiteConnectionStringBuilder() सिर्फ देखने के लिए कि क्या होता है सहित विभिन्न अन्य कनेक्शन तार करने की कोशिश की, और सभी सड़कों रोम करने के लिए नेतृत्व अर्थात्:

System.Data.SQLite.SQLiteException occurred 
    HResult=-2147467259 
    Message=unable to open database file 
    Source=System.Data.SQLite 
    ErrorCode=14 
    StackTrace: 
     at System.Data.SQLite.SQLite3.Open(String strFilename, SQLiteConnectionFlags connectionFlags, SQLiteOpenFlagsEnum openFlags, Int32 maxPoolSize, Boolean usePool) 
     at System.Data.SQLite.SQLiteConnection.Open() 
     at SQL.cSQL.Connect(String strPathFile) in C:\<Path to source file>:line 367 
    InnerException: 

विचार?

+0

.net3.5 से .NET4 तक अपग्रेड करने के बाद भी मुझे वही बात हुई। अभी तक कोई समाधान नहीं मिला है। :( – henon

+0

मैं इस मुद्दे के बारे में भूल गया था। मैंने कुछ किया, दुख की बात नहीं है कि इस समय क्या था, और समस्या दूर हो गई। मैंने इस मुद्दे को हल करने के लिए प्रोग्रामेटिक रूप से कुछ नहीं किया। संकल्प कुछ ऐसा था जो मैंने सर्वर पर किया था आप सर्वर को रिबूट करने का प्रयास करना चाह सकते हैं। समस्या को फाइल लॉकिंग या पसंद के साथ कुछ करना था। –

उत्तर

-3

मैंने अभी एक टिप्पणी छोड़ दी जो मुझे याद है। मैं इस थ्रेड को अनुत्तरित नहीं छोड़ना चाहता था, इसलिए मैंने जो कुछ याद किया उसके बारे में मैंने लिखा है।

मैंने कुछ किया, दुख की बात है कि इस समय क्या याद नहीं है, और समस्या दूर हो गई। मैंने इस मुद्दे को हल करने के लिए प्रोग्रामेटिक रूप से कुछ भी नहीं किया। संकल्प कुछ ऐसा था जो मैंने सर्वर पर किया था। आप सर्वर को रिबूट करने का प्रयास करना चाह सकते हैं। समस्या को फाइल लॉकिंग या पसंद के साथ कुछ करना था।

36
संस्करण में

> 1.0.82.0

  1. डबल फ़ाइल नाम (जैसे "\\\\network\share\file.db") में अग्रणी दो बैकस्लैश।

  2. मैप किए गए ड्राइव अक्षर का उपयोग करें।

  3. SQLiteConnection कन्स्ट्रक्टर का उपयोग करें जो parseViaFramework बूलियन तर्क लेता है और उस तर्क के लिए 'सत्य' पास करता है।

एसक्यूएल पोस्ट here

+0

विचारों के लिए धन्यवाद, हालांकि मैं अपना काम वापस जाने तक जवाब देने में सक्षम नहीं हूं। मुझे उम्मीद है कि अस्थायी रूप से, बंद कर दिया। समस्या मेरी मशीन पर हुई, लेकिन अन्य मशीनों पर काम किया, इसलिए मुझे नहीं लगता कि बैक स्लेश दोगुना काम करेगा। मुझे पूरा यकीन है कि मैंने \\\\ नेटवर्क का उपयोग किया था। –

+0

@ranmoro क्यों है 2. महत्वपूर्ण? मुझे एक समस्या है कि जब मैं इसके बिना किसी डेटाबेस तक पहुंचने का प्रयास करता हूं (आपका बिंदु 1.) मुझे "डेटाबेस फ़ाइल खोलने में असमर्थ" मिलता है, लेकिन जब मैं ड्राइव अक्षर का उपयोग कर एक ही डेटाबेस खोलने का प्रयास करता हूं (ड्राइव सभी के साथ मैप किया गया है, इसलिए कोई बदलाव नहीं है वहां) यह ठीक काम करता है। – gajo357

+1

धन्यवाद, यह काम करता है! इसलिए सी # में भागने की सूचना के साथ आपको 8 बैकस्लैश लिखने की आवश्यकता है: \\\\\\\ \\ file.db – LoC

1

मैं ने वही समस्या थी देखें। एक मैप किए गए ड्राइव पथ (एस: \ फ़ोल्डर \ file.db) के साथ यूएनसी (\ सर्वर \ शेयर \ फ़ोल्डर \ file.db) को प्रतिस्थापित करना मेरे उदाहरण में समस्या को हल करें।

0

त्रुटि संदेश बहुत भ्रामक है + परेशान करना। स्थानीय वातावरण में ठीक काम कर रहे अनुप्रयोग क्लाइंट सर्वर की स्थिति में शुरू करने में विफल रहे।

इसमें अधिकतर कोड के साथ करने के लिए नोटिंग है। यह सर्वर पक्ष से संबंधित है।

  • सुनिश्चित करें कि Write एक्सेस फ़ाइल वाले सर्वर फ़ोल्डर के लिए उपलब्ध है।

  • यूएनसी [आईपी आधारित सर्वर पथ] अभी भी समर्थित नहीं है, इस समस्या को दूर करने के लिए नेटवर्क पथ/फ़ोल्डर को मैप किया जाना चाहिए।

  • कुछ साइटें + उपयोगकर्ता कनेक्शन स्ट्रिंग में संस्करण संख्या का उल्लेख करने के लिए कह रहे हैं। मेरे सभी एप्लिकेशन पर के बिना ठीक काम कर रहे हैं।

कनेक्शन स्ट्रिंग:

Data Source=[Mapped Server Location]\[SubFolders]\[FileName].db; 

अद्यतन:

मैं यूएनसी पथ के लिए \\ पहले जोड़ें करने की कोशिश की और यह काम किया है (केवल शुरुआत में जोड़ा अतिरिक्त \\, नहीं के बीच)।

Data Source=\\[UNC]\[SubFolders]\[FileName].db;