【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 (12)程序与数据备份
2016-07-13 10:32
826 查看
声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!http://yuangang.cnblogs.com
希望大家好好一步一步做,所有的技术和项目,都毫无保留的提供,希望大家能自己跟着做一套,[b][b]还有,请大家放心,只要大家喜欢,有人需要,绝对不会烂尾,我会坚持写完~[/b][/b]
如果你感觉文章有帮助,点一下推荐,让更多的朋友参与进来,也是对本人劳动成果的鼓励,谢谢大家!由于还要工作,所以基本都是牺牲午休时间来写博客的,写博客呢不是简单的Ctrl+C、Ctrl+V,我是要挨着做一遍的,这也是对大家负责,所以有些时候更新不及时,或者问题没有及时解答,希望大家谅解,再次感谢大家!!
因为我引用了许多以前积累的类库,所以有些东西是重复的(后来更新),有些东西是过时的,包括我写的代码,希望大家不要纯粹的复制,取其精华去其糟粕>_<。
索引
程序文件备份与数据备份
项目准备
我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。
压缩方法 参考:
我们来测试一下:
5.2 Demo 下载:百度网盘
原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com
希望大家好好一步一步做,所有的技术和项目,都毫无保留的提供,希望大家能自己跟着做一套,[b][b]还有,请大家放心,只要大家喜欢,有人需要,绝对不会烂尾,我会坚持写完~[/b][/b]
如果你感觉文章有帮助,点一下推荐,让更多的朋友参与进来,也是对本人劳动成果的鼓励,谢谢大家!由于还要工作,所以基本都是牺牲午休时间来写博客的,写博客呢不是简单的Ctrl+C、Ctrl+V,我是要挨着做一遍的,这也是对大家负责,所以有些时候更新不及时,或者问题没有及时解答,希望大家谅解,再次感谢大家!!
因为我引用了许多以前积累的类库,所以有些东西是重复的(后来更新),有些东西是过时的,包括我写的代码,希望大家不要纯粹的复制,取其精华去其糟粕>_<。
索引
【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
简述程序文件备份与数据备份
项目准备
我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。
项目开始
最近一段时间手头项目比较多,所以更新缓慢,并不是不更新了,希望大家理解。
大多数情况下,程序文件的备份,我们都是通过服务器互备来解决的,数据库呢,我们可以添加备份计划,自行备份。我们做这个功能是对于特殊情况的需求,同时更多的是学习一下思路和方法,可能你会在其它功能中用到这里面的部分功能。
一、程序的备份
我们首先在ComManage区域下面新建一个控制器BackupRestoreController 继承 BaseController
1.1 Index视图 我们列出所有的备份文件(包含程序文件和数据备份文件)
1.2 我们添加这个视图
1.3 获取文件列表的方法
/// <summary> /// 获取备份文件信息 /// </summary> /// <returns></returns> public ActionResult GetBackUpData() { string fileExt = Request.Form["fileExt"]; string path = "/App_Data/BackUp/"; var jsonM = new JsonHelper() { Status = "y", Msg = "success" }; try { if (!FileHelper.IsExistDirectory(Server.MapPath(path))) { jsonM.Status = "n"; jsonM.Msg = "目录不存在!"; } else if (FileHelper.IsEmptyDirectory(Server.MapPath(path))) { jsonM.Status = "empty"; } else { if (fileExt == "*" || string.IsNullOrEmpty(fileExt)) { jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(path))).OrderByDescending(p => p.time).ToList(); } else { jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(path))).OrderByDescending(p => p.time).Where(p => p.ext == fileExt).ToList(); } } } catch (Exception) { jsonM.Status = "err"; jsonM.Msg = "获取文件失败!"; } return Content(JsonConverter.Serialize(jsonM, true)); }
1.4 程序备份,我们把备份的程序文件放到/App_Data/BackUp/ApplicationBackUp 目录下
我们用zip压缩和解压,注意的一点就是 我们压缩的文件是存储在App_Data目录下,所以压缩的时候要排除这个目录,不然正在写入这个目录同时压缩这个目录会冲突。压缩方法 参考:
ICSharpCode.SharpZipLib 压缩、解压文件 附源码
/// <summary> /// 备份程序文件 /// </summary> /// <returns></returns> [UserAuthorizeAttribute(ModuleAlias = "Backup", OperaAction = "BackUpApplication")] public ActionResult BackUpFiles() { var json = new JsonHelper() { Msg = "程序备份完成", Status = "n" }; try { //检查上传的物理路径是否存在,不存在则创建 if (!Directory.Exists(Server.MapPath("/App_Data/BackUp/ApplicationBackUp/"))) { Directory.CreateDirectory(Server.MapPath("/App_Data/BackUp/ApplicationBackUp/")); } ZipHelper.ZipDirectory(Server.MapPath("/"), Server.MapPath("/App_Data/BackUp/ApplicationBackUp/"), "App_" + this.CurrentUser.PinYin + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"), true, new List<string>() { Server.MapPath("/App_Data/") }); WriteLog(Common.Enums.enumOperator.None, "程序备份:" + json.Msg, Common.Enums.enumLog4net.WARN); json.Status = "y"; } catch (Exception e) { json.Msg = "程序备份失败!"; WriteLog(Common.Enums.enumOperator.None, "程序备份:", e); } return Json(json); }
我们来测试一下:
1.5 数据备份,备份的bak文件我们存在/App_Data/BackUp/DataBaseBackUp/目录下
/// <summary> /// 备份数据 /// </summary> /// <returns></returns> [UserAuthorizeAttribute(ModuleAlias = "Backup", OperaAction = "BackUpDataBase")] public ActionResult BackUpData() { var json = new JsonHelper() { Msg = "数据备份完成", Status = "n" }; try { //检查上传的物理路径是否存在,不存在则创建 if (!Directory.Exists(Server.MapPath("/App_Data/BackUp/DataBaseBackUp/"))) { Directory.CreateDirectory(Server.MapPath("/App_Data/BackUp/DataBaseBackUp/")); } //备份数据库 using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) { var bakPath = Server.MapPath("/App_Data/BackUp/DataBaseBackUp/"); using (SqlCommand cmd = new SqlCommand("backup database wkmvc_comnwes to disk='" + bakPath + "Data_" + this.CurrentUser.PinYin + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bak'", conn)) { try { conn.Open(); cmd.CommandTimeout = 0; cmd.ExecuteNonQuery(); } catch (Exception e) { throw e; } finally { conn.Close(); cmd.Dispose(); } } } WriteLog(Common.Enums.enumOperator.None, "数据备份:" + json.Msg, Common.Enums.enumLog4net.WARN); json.Status = "y"; } catch (Exception e) { json.Msg = "数据备份失败!"; WriteLog(Common.Enums.enumOperator.None, "数据备份:", e); } return Json(json); }
1.6 数据还原 程序文件的还原 就是解压文件 到指定目录 关于解压文件 大家参考:
ICSharpCode.SharpZipLib 压缩、解压文件 附源码
数据库备份文件的还原
/// <summary> /// 还原数据 /// </summary> /// <returns></returns> [UserAuthorizeAttribute(ModuleAlias = "Restore", OperaAction = "RestoreData")] public ActionResult RestoreData() { var json = new JsonHelper() { Msg = "数据还原完成", Status = "n" }; var path = Request.Form["path"]; try { //检查还原备份的物理路径是否存在 if (!System.IO.File.Exists(Server.MapPath(path))) { json.Msg = "还原数据失败,备份文件不存在或已损坏!"; return Json(json); } //还原数据库 using (SqlConnection Con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) { try { Con.Open(); SqlCommand Com = new SqlCommand("use master restore database wkmvc_comnwes from disk='" + Server.MapPath(path) + "'", Con); Com.ExecuteNonQuery(); } catch (Exception e) { throw e; } } WriteLog(Common.Enums.enumOperator.None, "数据还原:" + json.Msg, Common.Enums.enumLog4net.WARN); json.Status = "y"; } catch (Exception e) { json.Msg = "数据还原失败!"; WriteLog(Common.Enums.enumOperator.None, "数据还原:", e); } return Json(json); }
5.2 Demo 下载:百度网盘
原创文章 转载请尊重劳动成果 http://yuangang.cnblogs.com
相关文章推荐
- 实例简述Spring AOP之对AspectJ语法的支持
- 实例简述Spring AOP之对AspectJ语法的支持
- ASP.NET Core框架揭秘(持续更新中…)
- 在ASP.NET中如何运行后台任务
- ASP.NET Core "完整发布,自带运行时" 到jexus
- 【ASP】Window2008站点安全设置,IIS7/IIS7.5中目录执行权限的设置方法
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
- asp.net mvc本地程序集和GAC的程序集冲突解决方法
- PiLC - S7 PLC for Raspberry Pi
- 树莓派 GrovePi Raspberry Pi 3B 添加 Grove Pi 扩展
- asp.net mvc 分页 CPager(秒杀杨涛MvcPager)之封装之后
- Asp.net Core基于MVC框架实现PostgreSQL操作
- FileUpload上传Excel文件,Aspose导入数据至数据库(web)
- ASP.NET 第一课后小结
- asp.net mvc 之旅 —— 第五站 从源码中分析asp.net mvc 中的TempData
- JavaSpring
- linq to entity查询的日期格式化
- ASP.NET的内置对象之四 Cookie
- asp.net mvc 分页 CPager(秒杀杨涛MvcPager)之封装之前
- ASP.NET MVC 基于角色的权限控制系统的示例教程