You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中C#实现数据库还原报错求助

问题:ASP.NET MVC还原数据库时提示会话占用错误

在基于C#编写的ASP.NET MVC应用中,实现从.bak文件还原SQL Server数据库的存储过程时,出现以下错误:

无法处理对数据库'SkyExams'的还原操作,因为该数据库正被当前会话占用。执行此操作时建议使用master数据库。RESTORE DATABASE异常终止。

已尝试以下方案但未解决:

  • 在master数据库中创建存储过程
  • 启用单用户模式(相关代码已在存储过程中注释)

作业需求说明提到还原时系统可退出,这可能是一个可行的解决方向。


还原存储过程代码

CREATE PROCEDURE skyExamsRestore
    @name VARCHAR(MAX) = 'SkyExams' -- 要还原的数据库名称
AS
BEGIN
    --ALTER DATABASE SkyExams
    --SET SINGLE_USER
    --WITH ROLLBACK IMMEDIATE

    DECLARE @SQL VARCHAR(MAX)
    DECLARE @NewDBName VARCHAR(MAX) -- 还原后的目标数据库名称
    DECLARE @FileNameOrgBackup VARCHAR(MAX) -- 待还原的备份文件名
    DECLARE @PathOrgignalBackup VARCHAR(MAX) -- 备份文件所在路径

    SET @NewDBName = @name
    SET @PathOrgignalBackup = 'F:\BackupSkyExams\SkyExams_20220930.BAK'
    SET @FileNameOrgBackup = @PathOrgignalBackup + @name + '.bak'

    SET @SQL = 'RESTORE DATABASE ' + @NewDBName
    SET @SQL = @SQL + ' FROM DISK = ''' + @FileNameOrgBackup + ''''

    EXECUTE(@SQL)

    --ALTER DATABASE SkyExams SET MULTI_USER
END

视图按钮代码

<button type="button" id="btnRestore" class="btn btn-info" style="width:250px;" onclick="location.href='@Url.Action("BtnRestore_Click", "Sys_User", new { loggedId = Model.SysUser_ID })'">
    还原数据库
</button> 

<label>
    @restoreMessage
</label>
<br />
<br />

控制器操作方法代码

public ActionResult BtnRestore_Click(int loggedId)
{                
    var obj = db.Database.ExecuteSqlCommand (TransactionalBehavior.DoNotEnsureTransaction, "skyExamsRestore");

    if (obj != 0)
    {
         string temp = "还原已成功执行。";
         return RedirectToAction("viewAccount", new { id = loggedId, restoreMessage = temp });
    }
    else
    {
        return RedirectToAction("loginScreen");
    }
}

内容的提问来源于stack exchange,提问作者Brandon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:50:28