2011-10-15 7 views
5

का उपयोग करके एक अलग नाम चुनें, मुझे एक समस्या मिली और एक ही समय में कुछ सीखा ....डेटाबेस पहले से मौजूद है। CreateDatabase()

मैंने मौजूदा सर्वर डेटाबेस से एक डीबीएमएल बनाया है।

डीबीएमएल से मैं स्थानीय डेटाबेस (एक। एमडीएफ फ़ाइल) बनाना चाहता था। मैंने डेटाबेस using DataContext.CreateDatabase("C:\xxxx.mdf") बनाया।

तब मैं हटाने का निर्णय लिया (मैन्युअल, जो एक बुरी बात evidentally है), क्योंकि जब मैं एक ही नाम (eventhough फ़ाइलें नष्ट हो जाती हैं) के साथ डेटाबेस को पुन: करने की कोशिश, मैं पहले से ही त्रुटि डाटाबेस प्राप्त मौजूद हैं। CreateDatabase()

मैंने रजिस्ट्री को देखने की कोशिश की, कोई भाग्य नहीं ... मैंने फ़ाइल के लिए पूरी हार्ड ड्राइव खोजने की कोशिश की .. कोई भाग्य नहीं।

गुगलिंग के बाद, मैंने पाया कि आप CreateDatabase() के साथ DeleteDatabase() के साथ बनाया गया डेटाबेस हटाते हैं .... फिर आप डेटाबेस को दोबारा बना सकते हैं।

अच्छी समस्या यह है कि अब भी मैं पुराने डेटाबेस को फिर से नहीं बना सकता क्योंकि सिस्टम सोचता है कि नाम पहले से मौजूद है।

पुराने databse फ़ाइल के reminents से छुटकारा पाने के लिए एक रास्ता "मौजूद नहीं है"

+0

जब आप नष्ट कर दिया इसे मैन्युअल रूप से आप दोनों mdf और एलडीएफ को नष्ट किया था:

आपकी अंतिम कनेक्शन स्ट्रिंग कुछ इस तरह देखना चाहिए? साथ ही, जब आप DeleteDatabase() को कॉल करते हैं तो आपको क्या त्रुटि मिलती है? –

+0

जब मैं DeleteDatabase() को आज़माता हूं, तो मुझे यह मिलता है: ** System.Data.SqlClient.SqlException: फ़ाइल C: \ xxxx.mdf के लिए स्वत: नामित डेटाबेस संलग्न करने का प्रयास विफल हुआ। एक ही नाम वाला डेटाबेस मौजूद है, या निर्दिष्ट फ़ाइल खोला नहीं जा सकता है, या यह यूएनसी शेयर पर स्थित है .. ** –

उत्तर

7

आप दृश्य स्टूडियो में server explorer के माध्यम से master डेटाबेस को खोलने की आवश्यकता (नया कनेक्शन जोड़ें + master डेटाबेस का चयन करें) है तो New query जोड़ें, Drop Database xxxx टाइप करें और इसे निष्पादित करें। तुम भी उपयोग कर सकते हैं Sql Server Management Studio.

+1

मुझे भी एक ही समस्या का सामना करना पड़ा। क्या आपने प्रोग्रामेटिक रूप से सुझाव दिया है? – remi

+0

यदि कोई व्यक्ति एक ही चीज़ पर सोच रहा है, तो हाँ, आप इसे प्रोग्रामिक रूप से कर सकते हैं। बस अपने कोड में डेटाबेस से कनेक्ट करें, फिर निष्पादन के लिए उचित SQL कथन भेजें ('डेटाबेस डेटाबेस xxxx')। – Daniel

3

एक समाधान (here के माध्यम से) SSEUtil उपयोग करने के लिए मौजूदा डाटाबेस को अलग करने के लिए है:

try 
{ 
    // open a connection to the database for test 
} 
catch (SystemException ex) // Change exception type based on your underlying data provider 
{ 
    if (ex.Message.ToLower().Contains("already exists. choose a different database name")) 
    { 
     var match = Regex.Match(ex.Message, "database '(.*)' already exists.", 
      RegexOptions.IgnoreCase); 

     if (match.Success) 
     { 
      String dbFileName = match.Groups[1].Value; 
      Process p = new Process(); 
      p.StartInfo.UseShellExecute = true; 
      p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      p.StartInfo.FileName = String.Format("{0}/Tools/SSEUtil.exe", 
       Environment.CurrentDirectory); 
      p.StartInfo.WorkingDirectory = Environment.CurrentDirectory; 
      p.StartInfo.Arguments = String.Format("-d \"{0}\"", dbFileName); 

      p.Start(); 
     } 
    } 
} 
+0

+1 लिंकक से SQL कक्षाओं के साथ SQL सर्वर डेटाबेस को प्रोग्रामेटिक रूप से तैनात करते समय मुझे इस समस्या का सामना करना पड़ा। यह सुनिश्चित नहीं है कि एप्लिकेशन मौजूद होने के बाद डेटाबेस क्यों संलग्न रहता है, हालांकि यह टूल डेटाबेस को अलग करने का प्रबंधन करता है। अगर किसी के पास विचार है कि इस समस्या को पहली जगह कैसे रोकें और इसलिए इस समाधान की आवश्यकता को हटा दें तो यह बहुत अच्छा होगा। रास्ते से समाधान के लिए धन्यवाद। –

-1

मैं भी वास्तव में यह एक ही समस्या थी। पहले, मैंने mysqlserver2012 में डेटाबेस को (कट) डेटाबेस हटा दिया और इसे मेरे एप्लिकेशन फ़ोल्डर में कॉपी किया। मेरे ऐप को बनाने के बाद मुझे यह त्रुटि मिली, और मेरे कनेक्शन स्ट्रिंग के Initial Catalog भाग को हटाकर इसे हल किया।

Data Source=<your server name>;AttachDbFileName=database path\databaseName.mdf;Integrated Security=True" + ";User Instance=True" + ";Context Connection=False;