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
相关产品推荐
相关产品推荐

