Я пытаюсь восстановить базу данных, сначала восстановив полную резервную копию, а затем восстановив разностную резервную копию с помощью класса Microsoft.SqlServer.Management.Smo.Restore. Полная резервная копия восстанавливается с помощью следующего кода:
Restore myFullRestore = new Restore();
myFullRestore.Database = "DatabaseName";
myFullRestore.Action = RestoreActionType.Database;
myFullRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myFullRestore.FileNumber = 1;
myFullRestore.SqlRestore(myServer); // myServer is an already-existing instance of Microsoft.SqlServer.Management.Smo.Server
После восстановления полной резервной копии (которая успешно завершается) мой код для восстановления дифференциальной резервной копии выглядит следующим образом:
Restore myDiffRestore = new Restore();
myDiffRestore.Database = "DatabaseName";
myDiffRestore.Action = RestoreActionType.Database;
myDiffRestore.AddDevice(@"C:\BackupFile.bak", DeviceType.File);
myDiffRestore.FileNumber = 4; // file contains multiple backup sets, this is the index of the set I want to use
myDiffRestore.SqlRestore(myServer);
Однако этот код вызывает исключение Microsoft.SqlServer.Management.Smo.FailedOperationException с сообщением «Не удалось восстановить серверное имя сервера».
Нужно ли явно указывать, что я восстанавливаю дифференциальную резервную копию, и если да, то как мне это сделать? Или проблема менее очевидна, чем эта? Будем весьма благодарны за любые предложения относительно того, что я делаю неправильно (или пренебрегаю).
Обновление : Не уверен, что это была первоначально опечатка или эта версия API была в более ранних версиях, но для более поздних версий это строка
fullRestore.AddDevice(...);
должно быть
fullRestore.Devices.AddDevice(...)