2016-03-08 54 views
0

我創建了一個數據庫,使用此代碼:如何通過打開的連接刪除生成的mdf文件?

public static void CreateDatabase(string databasePath) 
{ 
     AppDomain.CurrentDomain.SetData("DataDirectory", databasePath); 

     using (var connection = new System.Data.SqlClient.SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master; Integrated Security=true;;")) 
     { 
      connection.Open(); 

      using (var command = connection.CreateCommand()) 
      { 
       command.CommandText = 
        String.Format("CREATE DATABASE {0} ON PRIMARY (NAME={0}, FILENAME='{1}')", "CoolDatabase", databasePath + @"\database.mdf"); 
       command.ExecuteNonQuery(); 

       command.CommandText = 
        String.Format("EXEC sp_detach_db '{0}', 'true'", "CotanDB"); 
       command.ExecuteNonQuery(); 
      } 

      connection.Close(); 
     } 
} 

它創建了一個很好的工作.mdf文件爲我的單元測試。但是,在運行所有測試之後,我想再次移除它,因此不佔用空間。

我嘗試這樣做:

public static void DestroyDatabase(string databasePath) 
    { 
     if (File.Exists(databasePath + @"\database.mdf")) 
     { 
      File.Delete(databasePath + @"\database.mdf"); 
     } 

     if (File.Exists(databasePath + @"\database_log.ldf")) 
     { 
      File.Delete(databasePath + @"\database_log.ldf"); 
     } 
    } 

但是,這會引發錯誤

的過程,因爲它是被另一個無法訪問「到數據庫\ database.mdf路徑」 文件處理。

所以我試圖關閉所有連接到我的數據庫,所以我可以刪除它並刪除文件。然而,這不起作用:

var server = new Server(); 
server.KillDatabase(databasePath + @"\database.mdf"); 

會拋出

無法連接到服務器..

如何毀了我的本地數據庫文件?

編輯:我試着在評論中的答案代碼:後面跟有相同File.Delete代碼

using (var connection = new System.Data.SqlClient.SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master; Integrated Security=true;;")) 
     { 
      connection.Open(); 

      using (var command = connection.CreateCommand()) 
      { 
       command.CommandText = 
        String.Format("USE master"); 
       command.ExecuteNonQuery(); 

       command.CommandText = 
        String.Format("ALTER DATABASE {0} SET SINGLE_USER WITH ROLLBACK IMMEDIATE", "CotanDB"); 
       command.ExecuteNonQuery(); 

       command.CommandText = 
        String.Format("DROP DATABASE {0}", "CoolDatabase"); 
       command.ExecuteNonQuery(); 
      } 

      connection.Close(); 
     } 

。但是,這將引發:

用戶沒有權限更改數據庫「CoolDatabase」,該 數據庫不存在,或數據庫未處於允許 訪問檢查的狀態。

+0

OFFLINE然後DROP => [如何在SQL Server 2008中強制刪除數據庫](http://dba.stackexchange.com/questions/34264/how-to-force-drop-database-in-sql-server -2008/34265) –

回答

0

自己弄明白了。如果您調用SqlConnection.ClearPool(連接),則刪除與您的mdf文件的所有連接,之後您可以輕鬆刪除它。