我使用SQL Server SMO將.bak恢復到新數據庫,但失敗。smo恢復數據庫
的SQL Server 2012是和SMO對象版本是最新的SDK版本11.0
.bak的文件是使用SQL管理工作室2012年,同樣的本地PC,在相同的編碼PC以及創建。
該錯誤消息我得到的是:
還原失敗的服務器 '服務器'。
我的代碼有什麼問題?
string dbPath = Path.Combine(@"d:\my data", dbName + "_db" + ".mdf");
string logPath = Path.Combine(@"d:\my data", dbName + "_db" + "_Log.ldf");
Restore restore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem("d:\template.BAK", DeviceType.File);
restore.Devices.Add(deviceItem);
restore.Database = dbName + "_db";
RelocateFile relocateDataFile = new RelocateFile("Data", dbPath);
RelocateFile relocateLogFile = new RelocateFile("Log", logPath);
restore.RelocateFiles.Add(relocateDataFile);
restore.RelocateFiles.Add(relocateLogFile);
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.SqlRestore(server);
更新:我surrended SMO解決方案,並試圖
using (SqlConnection connection = new SqlConnection("Data Source=server;user id=sa;password=xxxxx;"))
{
using (SqlCommand command = new SqlCommand(@"RESTORE DATABASE beauty01 FROM DISK = 'd:\template.bak' WITH RECOVERY, MOVE 'beauty1' TO 'D:\MyData\beauty01_Data.mdf', MOVE 'beauty1_log' TO 'd:\Mydata\beauty01_Log.ldf', REPLACE", connection))
{
connection.Open();
// Add the parameters for the SelectCommand.
command.CommandType = CommandType.Text;
command.ExecuteNonQuery();
}
} >> work good.
感謝所有。
是否存在內部異常?請檢查調試,這可能會給你真正的原因。 – Bridge
另外,你確定你沒有試圖覆蓋已經存在的文件嗎?如果使用相同的'dbName',則可以使用相同名稱的數據和日誌文件 - 嘗試檢查文件是否先存在,如果存在,則不要嘗試再次創建它。 – Bridge
無法打開備份設備'd:\ template.BAK'。操作系統錯誤123(文件名,目錄名稱或卷標語法不正確。)。 >> .bak由sql management studio 2012創建,smo是正確的版本(版本11)。 –