2011-09-20 54 views
1

複製文件我的C#.Net windows應用程序連接到SQLServer2005數據庫並實現數據庫備份功能。如何從C#.Net

在我的應用程序,

我嘗試這樣執行文件副本:

<!-- language:lang-csharp --> 
File.Copy(Application.StartupPath + "\\dbSTK.mdf", "D:\\dbSTK123.mdf",true); 

但它拋出一個異常,並顯示以下信息:

" The Process cannot Access the File, because it is being use by another Process" 

我如何複製數據庫文件已被使用?

+2

如果關閉現有連接並試試,它是否仍在數據庫中打開。如果您試圖複製的文件仍然打開,則會出現此問題。 – Dotnet

回答

0

服務器拒絕對數據文件的進程內訪問。一旦它打開了一個數據文件,其他進程都不能打開它。這就是你的功能失敗的原因。

+2

這並沒有真正回答'他如何複製那個已經被使用的數據庫',而只是指出爲什麼他現有的代碼失敗了。 –

2

在SqlServer運行時,您無法複製mdf文件。只需臨時關閉SqlServer或在複製之前分離該數據庫(here)。

1

而不是複製實際的MDF,使用SQL Server內置的BACKUP命令備份MDF可能是一個更好的主意。

建議分離數據庫然後複製它是有問題的,因爲它會使數據庫脫機。

0

您應關閉所有打開的數據庫連接以訪問數據庫文件。但通常情況下,您不應該觸摸數據庫文件。你最好使用SQL命令來備份數據庫。

string backupCommandText = "BACKUP DATABASE [<YOUR_DB_NAME>]" + 
    "TO DISK = N'<BACKUP_PATH>' WITH NOFORMAT, NOINIT, " + 
    "NAME = N'Web-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"; 
SqlCommand cmd = new SqlCommand(); 
cmd.CommandText = backupCommandText ; 
cmd.Connection = conn; 
cmd.ExecuteNonQuery(); 
+0

感謝您的回答 但我得到了以下錯誤: 「未能找到數據庫‘dbSTK’這個名字沒有找到入口在sysdatabases中的條目確保名稱輸入正確 BACKUP DATABASE異常終止。。 「 我從VisualStudio IDE創建了數據庫,默認的sqlserver實例(。\ SQLEXPRESS) –