Восстановление БД с использованием C # - PullRequest
0 голосов
/ 04 августа 2011

Я пытаюсь восстановить БД с одного сервера на другой с помощью Microsoft.SqlServer.Management.Smo.Проблема в том, что я получаю сообщение об ошибке, утверждающее, что он не может найти файл .MDF.Причиной этого является то, что он пытается найти его в папке данных для имени экземпляра SQL, откуда он пришел, а не искать в папке данных другого экземпляра SQL.Есть ли способ сообщить ему, в какой папке искать mdf, вместо того, чтобы предполагать, что она помечена для файла BAK?Это так расстраивает

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Взгляните на эту статью от Bappi M Ahmed. Он показывает полный метод восстановления файла базы данных. Вот метод, который он показывает:

public void RestoreDatabase(String databaseName, String filePath, 
       String serverName, String userName, String password, 
       String dataFilePath, String logFilePath)
{
    Restore sqlRestore = new Restore();

    BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;

    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);

    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = dataFilePath + databaseName + ".mdf";
    String logFileLocation = logFilePath + databaseName + "_Log.ldf";
    db = sqlServer.Databases[databaseName];
    RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName+"_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.PercentCompleteNotification = 10;
    sqlRestore.PercentComplete += 
       new PercentCompleteEventHandler(sqlRestore_PercentComplete);

    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}
0 голосов
/ 04 августа 2011

Возможно, вам нужно добавить RelocateFile объекты к свойству RelocateFiles ArrayList объекта Restore.Вы пробовали это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...