У меня есть приложение, которое выполняет резервное копирование и восстановление баз данных SQL, это прекрасно работает на локальном компьютере, однако, если я запускаю это на сервере SQL, размещенном на другом компьютере, я получаю следующую ошибку
Microsoft.SqlServer.Management.Smo.FailedOperationException: не удалось выполнить резервное копирование для сервера «25 .98.30.79». ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: исключение произошло при выполнении оператора или пакета Transact-SQL. ---> System.Data.SqlClient.SqlException: не удается открыть устройство резервного копирования 'C: \ Program Files \ State Manager \ Archive \ Capture \ 20100217152147 * product * \ database * database ** database * database * .bak'. Ошибка операционной системы 3 (системе не удается найти указанный путь.).
Вероятно, это связано с тем, что сервер SQL пытается записать этот файл на свой локальный диск. Я не могу настроить общую область, в которую можно поместить резервную копию из-за ограничений безопасности.
Кто-нибудь знает, как я могу переместить эти данные обратно на компьютер, с которого вызывается код?
Мой код указан ниже.
private string Name;
private string Server;
private string dbName;
private string user;
private string password;
public Boolean performCapture(String archiveDir)
{
String destination = archiveDir + "\\" + Name;
if (!System.IO.Directory.Exists(destination))
{
System.IO.Directory.CreateDirectory(destination);
}
Server sqlServer = connect();
if (sqlServer != null)
{
DatabaseCollection dbc = sqlServer.Databases;
if (dbc.Contains(dbName))
{
Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = dbName;
BackupDeviceItem bkpDevice = new BackupDeviceItem(destination + "\\" + dbName + ".bak", DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.Incremental = false;
bkpDatabase.Initialize = true;
// Perform the backup
bkpDatabase.SqlBackup(sqlServer);
if (System.IO.File.Exists(destination + "\\" + dbName + ".bak"))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}