C# 用C语言恢复sqlserver数据库#

C# 用C语言恢复sqlserver数据库#,c#,sql-server,smo,database-restore,C#,Sql Server,Smo,Database Restore,我正在尝试用以下代码还原SQL数据库备份 private void btnRestore_Click(object sender, EventArgs e) { string dbName = "BakodahDB"; try { Server dbServer = new Server(); //local using windows athuentication Restore dbRestore = new Restore() {

我正在尝试用以下代码还原SQL数据库备份

private void btnRestore_Click(object sender, EventArgs e)
{
    string dbName = "BakodahDB";
    try
    {
        Server dbServer = new Server(); //local using windows athuentication 
        Restore dbRestore = new Restore() { Database = dbName, Action = RestoreActionType.Database, ReplaceDatabase = true, NoRecovery = false };
        dbRestore.Devices.AddDevice(@"C:\WorkHours\dbBackup.bak", DeviceType.File);
        dbRestore.PercentComplete += DbRestore_PercentComplete;
        dbRestore.Complete += DbRestore_Complete;
        dbRestore.SqlRestoreAsync(dbServer);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

当我点击按钮时,什么都没有发生,甚至没有错误信息。。。正确的方法是什么

我只需要在恢复之前终止所有进程

            // Kill all processes
            dbServer.KillAllProcesses(dbRestore.Database);
            // Set single-user mode
            Database db = dbServer.Databases[dbRestore.Database];
            // db.DatabaseOptions.UserAccess=true;
            db.Alter(TerminationClause.RollbackTransactionsImmediately);
            // Detach database
            dbServer.DetachDatabase(dbRestore.Database, false);

成功了

我只需要在恢复之前终止所有进程

            // Kill all processes
            dbServer.KillAllProcesses(dbRestore.Database);
            // Set single-user mode
            Database db = dbServer.Databases[dbRestore.Database];
            // db.DatabaseOptions.UserAccess=true;
            db.Alter(TerminationClause.RollbackTransactionsImmediately);
            // Detach database
            dbServer.DetachDatabase(dbRestore.Database, false);

成功了

可能的副本为了进一步协助,我有几个问题。您是否尝试过将
dbRestore
移出到更高的范围,例如类?您的学员的
DbRestore\u Complete
DbRestore\u Complete
实现是什么样子的?这项工作可能只是长时间运行吗?试试非异步版本;那会扔吗?或者,处理事件-报告了什么?@Cameron只是尝试了一下,但没有成功,'DbRestore_PercentComplete'和'DbRestore_Complete'只是更新进度条和状态文本标签。@Blorgbeard只是尝试了一下,至少现在出现了一条错误消息,
无法还原…
之后才没有响应。为了进一步提供帮助,我有几个问题。您是否尝试过将
dbRestore
移出到更高的范围,例如类?您的学员的
DbRestore\u Complete
DbRestore\u Complete
实现是什么样子的?这项工作可能只是长时间运行吗?试试非异步版本;那会扔吗?或者,处理事件-报告了什么?@Cameron只是尝试了一下,但它不起作用,'DbRestore_PercentComplete'和'DbRestore_Complete'只是更新了一个进度条和一个状态文本标签。@Blorgbeard刚刚尝试了一下,至少现在在没有响应之前出现了一条错误消息
还原失败..