2011-08-30 131 views
0

我一直在努力工作數小時,試圖找出爲什麼我無法讓我的C#應用​​程序還原SQL Server 2008數據庫。 我使用下面的代碼:還原SQL Server數據庫的問題

var conn = new SqlConnection("SERVER=Server;DATABASE=master;User ID=sa;Pwd=Password"); 
var srvConn = new ServerConnection(conn); 
var srv = new Server(srvConn); 

Restore res = new Restore(); 
res.Database = "RestoredDatabase"; 
res.Action = RestoreActionType.Database; 
res.Devices.AddDevice("Path to .bak-file", DeviceType.File); 
res.ReplaceDatabase = false; 
res.SqlRestore(srv); 

當我運行的代碼沒有任何反應。沒有錯誤或例外發生!我一直在網上尋找一個解決方案,但所有的例子都是一樣的,所以沒有幫助。

它可能是連接問題,或者.bak文件可能存在問題?

令人驚訝的是,使用Microsoft.SqlServer.Management.Smo中的對象時,沒有真正的調試功能,例如異常。

+1

嘗試使用SQL來恢復它?你的恢復課是什麼課程?命名空間? – TomTom

+1

嘗試使用'ReplaceDatabase = true' - 如果數據庫尚未存在,它不會傷害任何人... –

+0

您可能還想查看:http://www.codeproject.com/KB/database/ BackupRestoreWithSmo.aspx –

回答

0

這可能是一些權限問題,由於這種情況有時也不會發生還原。嘗試使用您的用戶名和密碼訪問的本地數據庫恢復「.bak」文件。任何如何訪問Sql BackupRestore網站以瞭解更多關於使用C#.net進行SQL備份的細節。希望它能幫助你。

+0

我使用相同的命名空間/類來創建具有相同用戶/權限的.bak文件。應用程序與數據庫不在同一臺機器上運行,但.bak文件位於「DB-machine」上。 –

+0

完成數據庫備份後,請確保通過Sql Server Management Studio連接到Sql服務器已關閉或未關閉,如果未關閉,則還原代碼將不起作用。 –

1
  • 首先,嘗試使用management studio選項恢復數據庫,使用相同的認證信息和相同的.BAK。如果它不起作用,則問題不在您的代碼上。
  • 如果第一個實驗工作正常,並且已經創建了數據庫,請確保在啓動恢復之前沒有人連接到它。您可以在Sql Server中執行sp_who2指令,以確保沒有連接到該數據庫。
1

如果您願意,您也可以推出自己的代碼。我在一些集成測試中使用它來將數據庫恢復到乾淨狀態。我將數據庫重置爲單用戶模式,所以如果有人連接到它 - 它會將它踢掉,以便我可以恢復它。

StringBuilder sb = new StringBuilder(); 
sb.Append("ALTER DATABASE "); 
sb.Append(" ["); 
sb.Append(databasename); 
sb.Append("] "); 
sb.Append(" SET SINGLE_USER WITH ROLLBACK IMMEDIATE;"); 
sb.Append("RESTORE DATABASE "); 
sb.Append(" ["); 
sb.Append(databasename); 
sb.Append("] "); 
sb.Append(@" FROM DISK = N'D:\SQLBACKUPS\AUTOMATION\"); 
sb.Append(backupfilename); 
sb.Append("' WITH FILE=1, NOUNLOAD, REPLACE, STATS=10"); 
return sb.ToString(); 

然後,只需創建一個sql命令對象,並將字符串生成器的結果作爲命令文本傳遞並執行。

相關問題