本期概述
上一期我們學習並實現了該系統的數據備份功能。這一期我們來一起實現下該系統的數據恢復功能.數據恢復是指當數據因外界條件影響而丟失后,我們需要使用先前的備份來恢復數據,從而避免照成不必要的損失.
原理
這里我們的數據恢復主要分兩步: ①讀取Excel數據: 打開Excel文件后,調用System.Data.OleDb數據訪問接口,讀取Excel文件數據,然后將數據臨時性存儲到DataSet數據集中. ②將讀取到的數據存入SQLServer: 遍歷 DataSet 數據集Record表中的所有行數據, 執行Sql數據庫操作將Record表中的數據插入到Sql Server中;最后調用Sql Server查看數據的方法將導入的數據刷新並顯示在DataGridView上.
界面設計
我們在管理界面 FrmManager 增加一個 導入Excel 按鈕 Name:btnImportExcel 如下圖

寫代碼前,我們需要在FrmManager.cs 類里新增一個命名空間 System.Data.OleDb,用於連接和操作 Excel數據文件.
using System.Data.OleDb;
然后實施代碼,代碼主要分2部分 ①讀取Excel里的數據 ②將讀取到的數據導入數據到Sql Server
public void ImportExcel(String filePath, DataGridView dgv) { /******************************* ①打開Excel文件 並讀取里面的數據 ***************************************/ //根據路徑打開一個Excel文件並將數據填充到DataSet中 以便 Sql Server 執行數據插入語句時 調用 //03版本 Excel 連接字符串 如果用03版本 連接字符串 打開07版本的Excel 會提示報錯 "外部表不是預期的格式" //string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;'"; //07版本 Excel 連接字符串 這里使用07版本的 兼容03版本 string connExcel = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;'"; OleDbConnection OleDbConn; try { //創建OleDbConn連接 OleDbConn = new OleDbConnection(connExcel); OleDbConn.Open(); //創建 Excel 數據表 //Microsoft.Office.Interop.Excel.DataTable dtExcel = OleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); System.Data.DataTable dtExcel = OleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); //獲取Excel表 string tableName = dtExcel.Rows[0][2].ToString().Trim(); tableName = "[" + tableName.Replace("'", "") + "]"; string queryExcel = "select 電影名稱,導演,發行日期 from " + tableName; //創建數據集ds 用於后期裝載 OleDbDataAdapter 中的獲取的結果 DataSet ds = new DataSet(); OleDbDataAdapter oleAdapter = new OleDbDataAdapter(queryExcel, connExcel); oleAdapter.Fill(ds, "Record"); OleDbConn.Close(); /*************************** ①Excel文件數據讀取完成 ***********************************************/ /************************** ②獲取Excel數據后,將數據導入到Sql Server ********************************/ string sqlInsert = null; //初始化sql int n = 0; //定義一個整數 用於獲取 ExecuteNonQuery()成功執行的行數 //遍歷 ds數據集中的 Record表里的所有行 foreach (DataRow dr in ds.Tables["Record"].Rows) { //創建插入語句 sqlInsert = "insert into Record(Movie_Name,Movie_Director,Date_Released) values('"; //每行有3個字段 電影名稱,導演 和 發行日期 sqlInsert += dr.ItemArray[0] + "','"; sqlInsert += dr.ItemArray[1] + "','"; sqlInsert += dr.ItemArray[2] + "')"; SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(sqlInsert, conn); conn.Open(); n += cmd.ExecuteNonQuery(); //每次成功 +1 conn.Close(); } //如果 n> 0 表示數據插入成功 if (n > 0) { MessageBox.Show("添加成功! 共插入" + n.ToString() + "條數據"); } else //否則失敗 { MessageBox.Show("添加失敗!"); return; } /************************** ②數據導入到Sql Server完成 **********************************************/ //調用refresh方法,在添加完成數據后 自動刷新DataGridView表 顯示新數據 Refresh(); } catch (Exception e) { //在整個過程中 如果出錯的話 顯示錯誤信息 MessageBox.Show(e.Message, "錯誤消息"); } } private void btnImportExcel_Click(object sender, EventArgs e) { //選擇需要導入的Excel文件 OpenFileDialog ofDialog = new OpenFileDialog(); ofDialog.Title = "請選擇需要導入的Excel文件"; ofDialog.Filter = "Excel Files(07版本 *.xlsx)|*.xlsx|(03版本 *.xls)|*.xls|所有文件(*.*)|*.*"; string fullPath = string.Empty; if (ofDialog.ShowDialog() == DialogResult.OK) { fullPath = ofDialog.FileName; } if (fullPath == "") { MessageBox.Show("未選擇Excel文件"); return; } //調用導入 Excel文件方法 ImportExcel(fullPath, dgvManager); }
好了我們來運行下看看
1.首先我們把數據庫數據清空

2.點擊 導入Excel 按鈕 選擇Excel文件

3. 顯示添加成功

4.最終數據被導入到Sql Server 並顯示在DataGridView上


到這里我們的數據恢復就做完了.下一期,我們來共同學習下管理員是如何給普通用戶分配功能權限的. :)
附上源代碼
MovieRecordManagementSystem09.zip
