У меня есть база данных SQL 2008. Я запускаю форму, которая поддерживает этот БД, затем пытается его обновить. Если обновление не работает, идея состоит в том, чтобы восстановить эту резервную копию. Вот код, который я использую для восстановления резервной копии.
public void RestoreDatabase(String databaseName, String backUpFile, String serverName, String userName, String password)
{
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(backUpFile, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
sqlRestore.Action = RestoreActionType.Database;
string logFile = System.IO.Path.GetDirectoryName(backUpFile);
logFile = System.IO.Path.Combine(logFile, databaseName + "_Log.ldf");
string dataFile = System.IO.Path.GetDirectoryName(backUpFile);
dataFile = System.IO.Path.Combine(dataFile, databaseName + ".mdf");
Database db = sqlServer.Databases[databaseName];
RelocateFile rf = new RelocateFile(databaseName, dataFile);
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFile));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFile));
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
}
Проблема заключается в том, что имена файлов, которые я выбираю, отличаются от онлайн-БД. Я в основном хочу заменить базу данных на сервере резервной копией. Я получаю исключение, когда я вызываю SqlRestore.
Основное исключение говорит
{ "Сбой восстановления для сервера" Локальный "." }
Копание во внутренние исключения показывает эти ошибки
При выполнении исключения оператор Transact-SQL или пакет.
а затем
Логический файл "DB" не является частью база данных "БД". Использовать ВОССТАНОВЛЕНИЕ FILELISTONLY для отображения логического файла имена. \r\nRESTORE DATABASE завершение аномально.
Я предполагаю, что есть какой-то способ сказать это просто использовать замену существующей БД как есть.
Я использую этот бит кода, чтобы получить путь к файлу базы данных, чтобы создать резервную копию каталога. Возможно, это может быть использовано для восстановления имен файлов.
public string GetDBFilePath(String databaseName, String userName, String password, String serverName)
{
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
return sqlServer.Databases[databaseName].PrimaryFilePath;
}