2011-10-15 30 views
5

我得到了一個問題,並在同一時間學到了東西....數據庫已經存在。選擇一個不同的名稱使用CreateDatabase()

我創建了一個DBML從現有的服務器數據庫。

從DBML我想創建本地數據庫(一個.mdf文件)。我創建了數據庫using DataContext.CreateDatabase("C:\xxxx.mdf")

然後,我決定把它刪除(手動,這是一件壞事evidentally),因爲當我嘗試重新創建具有相同的名稱(eventhough文件被刪除)數據庫中,我得到的錯誤數據庫已經存在。使用CreateDatabase()

我試圖尋找通過註冊表,沒有運氣......我試圖搜索整個硬盤驅動器的文件..沒有運氣。

谷歌搜索後,我發現你刪除了使用CreateDatabase()創建的數據庫與DeleteDatabase() ....然後你可以重新創建數據庫。

好的問題是,現在我仍然無法重新創建舊的數據庫,因爲系統認爲名稱已經存在。

有沒有辦法擺脫舊DATABSE文件的reminents的「不存在」

+0

,當你刪除它沒有手動刪除這兩個MDF和LDF?另外,現在調用DeleteDatabase()時會得到什麼錯誤? –

+0

當我嘗試DeleteDatabase(),我得到這個:** System.Data.SqlClient.SqlException:嘗試爲文件C:\ xxxx.mdf附加一個自動命名的數據庫失敗。名稱相同的數據庫存在,或者指定的文件無法打開,或者它位於UNC共享位置。** –

回答

7

你需要通過server explorer在Visual Studio中打開master數據庫(添加新連接+選擇master數據庫),然後添加New query,輸入Drop Database xxxx並執行它。您還可以使用Sql Server Management Studio.

+1

我也遇到了同樣的問題。是否有可能以編程方式執行您的建議? – remi

+0

如果有人想知道同樣的事情,是的,你可以通過編程來完成這個任務。只需在代碼中連接到數據庫,然後發送適當的SQL語句以執行('drop database xxxx')。 – Daniel

3

溶液(通過here)是使用SSEUtil脫離現有的DB:

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我用Linq to SQL類以編程方式部署SQL Server數據庫時遇到此問題。不知道爲什麼數據庫在應用程序存在後仍然保持連接狀態,但是該工具設法分離數據庫。如果任何人有想法如何首先防止這個問題,並因此消除這種解決方案的需要,這將是偉大的。順便謝謝你的解決方案。 –

-1

我其實也有同樣的問題。以前,我刪除了 (剪切)mysqlserver2012中的數據庫並將其複製到我的應用程序文件夾中。我做了我的應用程序後,我得到了這個錯誤,並通過刪除我的連接字符串的Initial Catalog部分來解決它。

你最終的連接字符串應該是這個樣子:

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

相關問題