在VirtualBox中运行时,Firebird数据库未被还原

时间:2014-01-02 16:27:43

标签: c# virtualbox firebird2.5

我有一个在VirtualBox VM中运行的Windows 7应用程序。它用于在使用System.Diagnostics.Process本机运行时恢复数据库,但几个月前停止了。这是我的代码:

Cursor.Current = Cursors.WaitCursor;
bookConn.Close();  //  close the connection

FbRestore restoreSvc = new FbRestore();
restoreSvc.ConnectionString = "User=SYSDBA;Password=masterkey;DataSource=localhost;Database=" + dbPath + ";Pooling=true;";
restoreSvc.BackupFiles.Add(new FbBackupFile(backupFilename, 2048));
restoreSvc.PageSize = 4096;
restoreSvc.Options = FbRestoreFlags.Create | FbRestoreFlags.Replace;
restoreSvc.ServiceOutput += new ServiceOutputEventHandler(ServiceOutput);
restoreSvc.Execute();

Cursor.Current = Cursors.Default;

我可以从命令行恢复,但不能从Windows应用程序中恢复。任何想法为什么不呢?

1 个答案:

答案 0 :(得分:0)

扩展我的评论,这里有几件事要尝试:

首先,尝试进行一些日志记录,我记得在某个地方读到一个“已知”的bug,你有时需要强制verbose=true请尝试使用这段代码:

public void RestoreDatabase(string dbPath)
{
    FbRestore restoreSvc = new FbRestore();

    restoreSvc.ConnectionString = "User=SYSDBA;Password=masterkey;DataSource=localhost;Database=" + dbPath + ";Pooling=true;";
    restoreSvc.BackupFiles.Add(new FbBackupFile(BackupRestoreFile, 2048));
    restoreSvc.Verbose = true; // Enable verbose logging
    restoreSvc.PageSize = 4096;
    restoreSvc.Options = FbRestoreFlags.Create | FbRestoreFlags.Replace;

    restoreSvc.ServiceOutput += new ServiceOutputEventHandler(ServiceOutput);

    restoreSvc.Execute();
}

private void ServiceOutput(object sender, ServiceOutputEventArgs e)
{
    Console.WriteLine(e.Message);
}

然后,这应该有助于了解正在发生的事情,因为你应该开始进行一些记录。 Execute 可能会立即终止,因此您需要确保在备份仍在恢复并写入ServiceOutput等时,您的应用不会结束。

当您运行应用程序时,您还需要检查是否以管理员身份运行以确保没有奇怪的Windows权限问题。