【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (12)程式與資料備份
索引
簡述
程式檔案備份與資料備份
專案準備
我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。
專案開始
最近一段時間手頭專案比較多,所以更新緩慢,並不是不更新了,希望大家理解。
大多數情況下,程式檔案的備份,我們都是通過伺服器互備來解決的,資料庫呢,我們可以新增備份計劃,自行備份。我們做這個功能是對於特殊情況的需求,同時更多的是學習一下思路和方法,可能你會在其它功能中用到這裡面的部分功能。
一、程式的備份
我們首先在ComManage區域下面新建一個控制器BackupRestoreController 繼承 BaseController
1.1 Index檢視 我們列出所有的備份檔案(包含程式檔案和資料備份檔案)
1.2 我們新增這個檢視
1.3 獲取檔案列表的方法
1 /// <summary> 2 /// 獲取備份檔案資訊 3 /// </summary> 4 /// <returns></returns> 5 public ActionResult GetBackUpData()6 { 7 string fileExt = Request.Form["fileExt"]; 8 string path = "/App_Data/BackUp/"; 9 var jsonM = new JsonHelper() { Status = "y", Msg = "success" }; 10 try 11 { 12 if (!FileHelper.IsExistDirectory(Server.MapPath(path)))13 { 14 jsonM.Status = "n"; 15 jsonM.Msg = "目錄不存在!"; 16 } 17 else if (FileHelper.IsEmptyDirectory(Server.MapPath(path))) 18 { 19 jsonM.Status = "empty"; 20 } 21 else 22 { 23 if (fileExt == "*" || string.IsNullOrEmpty(fileExt)) 24 { 25 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(path))).OrderByDescending(p => p.time).ToList(); 26 } 27 else 28 { 29 jsonM.Data = Common.Utils.DataTableToList<FileModel>(FileHelper.GetAllFileTable(Server.MapPath(path))).OrderByDescending(p => p.time).Where(p => p.ext == fileExt).ToList(); 30 } 31 32 } 33 34 } 35 catch (Exception) 36 { 37 jsonM.Status = "err"; 38 jsonM.Msg = "獲取檔案失敗!"; 39 } 40 return Content(JsonConverter.Serialize(jsonM, true)); 41 }
1.4 程式備份,我們把備份的程式檔案放到/App_Data/BackUp/ApplicationBackUp 目錄下
我們用zip壓縮和解壓,注意的一點就是 我們壓縮的檔案是儲存在App_Data目錄下,所以壓縮的時候要排除這個目錄,不然正在寫入這個目錄同時壓縮這個目錄會衝突。
壓縮方法 參考:
1 /// <summary> 2 /// 備份程式檔案 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "Backup", OperaAction = "BackUpApplication")] 6 public ActionResult BackUpFiles() 7 { 8 var json = new JsonHelper() { Msg = "程式備份完成", Status = "n" }; 9 10 try 11 { 12 //檢查上傳的物理路徑是否存在,不存在則建立 13 if (!Directory.Exists(Server.MapPath("/App_Data/BackUp/ApplicationBackUp/"))) 14 { 15 Directory.CreateDirectory(Server.MapPath("/App_Data/BackUp/ApplicationBackUp/")); 16 } 17 18 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/") }); 19 WriteLog(Common.Enums.enumOperator.None, "程式備份:" + json.Msg, Common.Enums.enumLog4net.WARN); 20 json.Status = "y"; 21 } 22 catch (Exception e) 23 { 24 json.Msg = "程式備份失敗!"; 25 WriteLog(Common.Enums.enumOperator.None, "程式備份:", e); 26 } 27 28 return Json(json); 29 }
我們來測試一下:
1.5 資料備份,備份的bak檔案我們存在/App_Data/BackUp/DataBaseBackUp/目錄下
1 /// <summary> 2 /// 備份資料 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "Backup", OperaAction = "BackUpDataBase")] 6 public ActionResult BackUpData() 7 { 8 var json = new JsonHelper() { Msg = "資料備份完成", Status = "n" }; 9 10 try 11 { 12 //檢查上傳的物理路徑是否存在,不存在則建立 13 if (!Directory.Exists(Server.MapPath("/App_Data/BackUp/DataBaseBackUp/"))) 14 { 15 Directory.CreateDirectory(Server.MapPath("/App_Data/BackUp/DataBaseBackUp/")); 16 } 17 //備份資料庫 18 using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) 19 { 20 var bakPath = Server.MapPath("/App_Data/BackUp/DataBaseBackUp/"); 21 using (SqlCommand cmd = new SqlCommand("backup database wkmvc_comnwes to disk='" + bakPath + "Data_" + this.CurrentUser.PinYin + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".bak'", conn)) 22 { 23 try 24 { 25 conn.Open(); 26 cmd.CommandTimeout = 0; 27 cmd.ExecuteNonQuery(); 28 } 29 catch (Exception e) 30 { 31 throw e; 32 } 33 finally 34 { 35 conn.Close(); 36 cmd.Dispose(); 37 } 38 } 39 } 40 41 WriteLog(Common.Enums.enumOperator.None, "資料備份:" + json.Msg, Common.Enums.enumLog4net.WARN); 42 json.Status = "y"; 43 } 44 catch (Exception e) 45 { 46 json.Msg = "資料備份失敗!"; 47 WriteLog(Common.Enums.enumOperator.None, "資料備份:", e); 48 } 49 50 return Json(json); 51 }
1.6 資料還原 程式檔案的還原 就是解壓檔案 到指定目錄 關於解壓檔案 大家參考:
資料庫備份檔案的還原
1 /// <summary> 2 /// 還原資料 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "Restore", OperaAction = "RestoreData")] 6 public ActionResult RestoreData() 7 { 8 var json = new JsonHelper() { Msg = "資料還原完成", Status = "n" }; 9 10 var path = Request.Form["path"]; 11 12 try 13 { 14 //檢查還原備份的物理路徑是否存在 15 if (!System.IO.File.Exists(Server.MapPath(path))) 16 { 17 json.Msg = "還原資料失敗,備份檔案不存在或已損壞!"; 18 return Json(json); 19 } 20 //還原資料庫 21 using (SqlConnection Con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SqlConnectionString"].ConnectionString)) 22 { 23 24 try 25 { 26 Con.Open(); 27 SqlCommand Com = new SqlCommand("use master restore database wkmvc_comnwes from disk='" + Server.MapPath(path) + "'", Con); 28 Com.ExecuteNonQuery(); 29 } 30 catch (Exception e) 31 { 32 throw e; 33 } 34 } 35 36 WriteLog(Common.Enums.enumOperator.None, "資料還原:" + json.Msg, Common.Enums.enumLog4net.WARN); 37 json.Status = "y"; 38 } 39 catch (Exception e) 40 { 41 json.Msg = "資料還原失敗!"; 42 WriteLog(Common.Enums.enumOperator.None, "資料還原:", e); 43 } 44 45 return Json(json); 46 }
5.2 Demo 下載:百度網盤
相關推薦
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (12)程式與資料備份
索引 簡述 程式檔案備份與資料備份 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。 專案開始
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(3)公共基礎資料操作類 RepositoryBase
索引 簡述 今天我們寫一個基礎資料的操作類,如果裡面有大家不理解的地方,可採取兩種方式,第一:提出來,第二:會用就行。這個類呢我一般不去修改它,因為基礎操作類,大家也可以直接拷貝到自己的專案中。 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (10)部門管理、崗位管理和員工管理
1 USE [wkmvc_db] 2 GO 3 /****** Object: Table [dbo].[SYS_POST_USER] Script Date: 2016/6/20 16:28:44 ******/ 4 SET ANSI_NULLS ON 5 GO
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (14)附資料庫、釋出專案
索引 簡述 總結一 整個系列其實還包括專案管理、考勤簽到、郵件、內部聊天等等,這個東西是做不完的,如果繼續還有新聞系統、靜態生成等等等等.... 其中,靜態頁生成在我的部落格中可以找到,三種方式: 第一種 就是類似網上的很多CMS一樣 採用標籤替換,但這種方式是不推薦的,特別是在我們.Net中,
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (16)原始碼分享二:登入功能以及UI、資料庫、倉儲原始碼分享
1 using Common; 2 using Service.IService; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Web;
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (15)原始碼分享一:修改倉儲IRepository、RepositoryBase
1 #region 獲取多條資料操作 2 3 /// <summary> 4 /// 返回IQueryable集合,延時載入資料 5 /// </summary> 6 /// &l
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(9) 角色管理,分配許可權
索引 簡述 今天我們來做角色的管理 和 角色許可權分配 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(1)搭建MVC環境 註冊區域
索引 簡述 從今天開始,我們從0開始搭建一個框架,並且完成一個任務管理系統的專案。這並不是什麼大專案,只是對於不熟悉MVC以及不熟悉面向介面開發和依賴注入的朋友們有所啟發,因為是從0開始,所以有些地方比較囉嗦,希望大家理解! 希望新手朋友們拋棄“拿來主義”,動手跟著一步一步的做,當做完這個框架和專案
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(6) 控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作
索引 簡述 今天我們來寫一個控制器基類 主要做登入使用者、許可權認證、日誌記錄等工作 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(8) 許可權管理,自定義許可權,擴充套件許可權
索引 簡述 今天我們來做許可權的管理,這篇比較多 希望新手朋友慢慢消化 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (13)客戶管理
索引 簡述 簡單的客戶管理 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。 專案開始 一、資料
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案 (11)檔案管理
索引 簡述 檔案管理,這個比較雞肋 但是有些方法 大家可以參考下 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(4)對前面的一些問題彙總和總結
索引 簡述 今天我們對前3章的問題總個彙總,對一些東西做個簡單的總結,相比大家到第3章發現編輯器報了很多錯誤了,不要擔心 那是正常的,因為有很多類庫我還沒有釋出。 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(2)建立資料庫和資料模型
索引 簡述 我們建立一個數據庫然後生成資料模型,新增ADO.NET實體資料模型,這裡呢常用的有兩種方式,一種是DbFirst,一種是CodeFirst,為了簡便,我們使用DbFirst。有基礎的朋友可以使用CodeFirst,對專案沒有影響的。 專案準備 我們用的工具是:VS 2013 + Sql
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(7.2) 模組管理,模組的新增、修改、刪除
索引 簡述 今天我們來做模組管理的 新增、修改、刪除 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.3) 登入功能的實現,豐富資料表、建立關聯
1 USE [wkmvc_db] 2 GO 3 /****** Object: Table [dbo].[SYS_CODE] Script Date: 2016/5/17 9:30:01 ******/ 4 SET ANSI_NULLS ON 5 GO 6 SET
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.4) 登入功能的實現,建立與登入使用者相關的介面和實現類
索引 簡述 今天我們建立幾個與登入使用者相關的資料表的介面和實現類 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.5) 登入功能的實現,完善登入功能
索引 簡述 今天我們來完善我們的登入功能 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。 專案開
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.2) 登入功能的實現,介面注入、log4net的使用
索引 簡述 前兩天事情比較多,耽誤更新了,希望大家多多包涵,今天我們繼續做我們的登入功能 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.1) 登入功能的實現,開始接觸Spring IOC、DI
索引 簡述 今天我們做登入,今天的東西比較多,用到了Spring的IOC和DI、介面的使用、驗證等,希望大家多多討論 專案準備 我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些