C#恢复陷入困境的数据库';恢复…';

C#恢复陷入困境的数据库';恢复…';,c#,sql,restore,recovery,C#,Sql,Restore,Recovery,我正在将SQL数据库备份和恢复部分插入到我的程序中。我一直在使用MSDN示例(尝试另一个示例,但它不起作用)。 MSDN页- 我已经让备份文件工作,并在ManagementStudio中测试了该文件 但是我在恢复文件时遇到了麻烦 代码似乎正常工作,但SQL Server中的数据库陷入“恢复…” 在这个示例中,有一个db.Alter();函数,但会引发一个错误,该错误表示“数据库'firstRecoverTest'的Alter失败” 请让我知道你的想法 提前谢谢 更新 插入“ReplaceData

我正在将SQL数据库备份和恢复部分插入到我的程序中。我一直在使用MSDN示例(尝试另一个示例,但它不起作用)。 MSDN页-

我已经让备份文件工作,并在ManagementStudio中测试了该文件

但是我在恢复文件时遇到了麻烦

代码似乎正常工作,但SQL Server中的数据库陷入“恢复…”

在这个示例中,有一个db.Alter();函数,但会引发一个错误,该错误表示“数据库'firstRecoverTest'的Alter失败”

请让我知道你的想法

提前谢谢

更新

插入“ReplaceDatabase=true;”后,最终结果没有变化。 同时,逐行遍历代码,表明代码已经完成

“db.Alter();”就是放在代码末尾的那个(显示为注释)。它用于创建备份,工作时不会出错。 InnerError在使用db.Alter()时显示此信息

“当数据库处于还原状态时,不允许使用ALTER DATABASE”

有趣的部分是SQL日志文件。我得到3个日志:

“正在启动数据库“firstRecoverTest”。”

“数据库‘firstRecoverTest’标记为正在还原,并且处于不允许运行恢复的状态。”

数据库已还原:数据库:firstRecoverTest,创建日期(时间):2011/09/20(15:44:48),第一个LSN:37:159:37,最后一个LSN:37:175:1,转储设备数:1,设备信息:(FILE=1,TYPE=DISK:{'C:\Users\Administrator\Desktop\installer\u backup')。信息性消息。无需用户操作

但是,当我使用SQLManagementStudio执行正常恢复时,还有两个日志条目表示

正在启动数据库“[databaseName]”

“数据库“[databaseName]”上的还原已完成。该数据库现在可用”


不幸的是,我没有足够的声誉在SQL Management Studio中发布一个关于它的小图片。

您应该尝试删除数据库或使用
sqlRestore.ReplaceDatabase=true

如果看起来什么都没有发生,您可以在一个单独的线程中启动进程,并使用这些线程连接事件以通知进度更改

sqlRestore.Complete += new ServerMessageEventHandler(completionEvent);
sqlRestore.PercentCompleteNotification = 10; // Call progress event every x percent change.
sqlRestore.PercentComplete += new PercentCompleteEventHandler(progressEvent);
如果这不起作用,你可以请张贴的Alter代码是不起作用的。还要检查SQL server日志和权限

已更新

好吧,更新更有意义。原因是您正在设置
sqlRestore.NoRecovery=true。这样做的效果是,在恢复完成后,数据库将保持在恢复状态,因此除了刚才恢复的完整备份外,还可以恢复其他差异备份

当它处于这种状态时,您将无法对数据库执行更多操作。我建议,除非您需要,否则保留默认值,即
NoRecovery=false


希望有帮助。

您应该尝试删除数据库或使用
sqlRestore.ReplaceDatabase=true

如果看起来什么都没有发生,您可以在一个单独的线程中启动进程,并使用这些线程连接事件以通知进度更改

sqlRestore.Complete += new ServerMessageEventHandler(completionEvent);
sqlRestore.PercentCompleteNotification = 10; // Call progress event every x percent change.
sqlRestore.PercentComplete += new PercentCompleteEventHandler(progressEvent);
如果这不起作用,你可以请张贴的Alter代码是不起作用的。还要检查SQL server日志和权限

已更新

好吧,更新更有意义。原因是您正在设置
sqlRestore.NoRecovery=true。这样做的效果是,在恢复完成后,数据库将保持在恢复状态,因此除了刚才恢复的完整备份外,还可以恢复其他差异备份

当它处于这种状态时,您将无法对数据库执行更多操作。我建议,除非您需要,否则保留默认值,即
NoRecovery=false


希望能有所帮助。

我已经更新了我的帖子,希望这些信息能帮助解释发生了什么。谢谢。我本以为我已经试着改变这一点,但我一定是出了什么问题,使它失败了。这就解决了问题。谢谢你,阿加尼更新了我的帖子,希望能帮助解释发生了什么。谢谢。我本以为我已经试着改变这一点,但我一定是出了什么问题,使它失败了。这就解决了问题。再次感谢你