您的位置:首页 > 编程语言 > ASP

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 (12)程序与数据备份

2016-07-13 10:32 826 查看
声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: