Как восстановить базу данных из C #
У меня есть БД 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» не является частью базы данныхDB», Используйте RESTORE FILELISTONLY для вывода списка логических имен файлов. \ RRESTORE 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;
}