C# 使用FirebirdSql.Data.Services.FbBackup将服务器备份到本地文件

C# 使用FirebirdSql.Data.Services.FbBackup将服务器备份到本地文件,c#,firebird,remote-backup,C#,Firebird,Remote Backup,我正在尝试使用以下代码备份位于远程服务器上的数据库,但我没有写入权限: FbBackup backupSvc = new FbBackup(); backupSvc.ConnectionString = ConnectionStr; // on remote server backupSvc.BackupFiles.Add(new FbBackupFile(destFile)); // local file backupSvc.Verbose = true; backupSvc.Options

我正在尝试使用以下代码备份位于远程服务器上的数据库,但我没有写入权限:

FbBackup backupSvc = new FbBackup();
backupSvc.ConnectionString = ConnectionStr; // on remote server
backupSvc.BackupFiles.Add(new FbBackupFile(destFile)); // local file
backupSvc.Verbose = true;
backupSvc.Options = FbBackupFlags.IgnoreLimbo;        
backupSvc.ServiceOutput += ServiceOutput;
backupSvc.Execute();
如果数据库在
localhost
上,或者如果我可以写入服务器文件夹,那么这种方法就非常有效。问题是当我需要将文件保存到本地计算机时(因为我在服务器上没有权限)。奇怪的是,服务输出显示了通常的输出-只是在最后,本地文件没有被创建


我读过关于使用gbak的文章,但是在使用gbak时遇到了许多其他问题。我很确定有一个缺少的参数或我缺少的任何其他奇怪的技巧…

FbBackup类只实现正常的gbak操作,其中客户端可以触发备份,但备份写在服务器上(使用Firebird服务器进程的访问权限)

如果希望在客户端上创建备份,则需要改用
FirebirdSql.Data.Services.FbStreamingBackup

另见

一个简单的例子:

static void Main(string[] args)
{
    var connectionString = new FbConnectionStringBuilder
    {
        Database = "employee",
        DataSource = "sagittarius",
        ServerType = FbServerType.Default,
        UserID = "sysdba",
        Password = "masterkey",
    }.ToString();

    using (var output = File.Create(@"D:\Temp\remotebackup.fbk"))
    {
        var backup = new FbStreamingBackup();
        backup.ConnectionString = connectionString;
        backup.OutputStream = output;
        backup.Execute();
    }
    Console.ReadLine();
}

太棒了,伙计,万分感谢,就是这样。你太棒了!作为一个附带问题-我得到一个“内存不足”的异常(数据库实际上相当大)-我能做些什么吗???(数据库大约是200Mb,所以实际上不是不可管理的…@neggenbe您是否使用内存流而不是文件流来创建备份?您是我今天的绝对英雄!!!!!!谢谢马克!!!!!在30分钟内完成所有这些!太棒了,让我开心!