本期概述
上一期我們學習並實現了該系統的資料備份功能。這一期我們來一起實現下該系統的資料恢複功能.資料恢複是指當資料因外界條件影響而丟失後,我們需要使用先前的備份來恢複資料,從而避免照成不必要的損失.
原理
這裡我們的資料恢複主要分兩步: ①讀取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
相關推薦 [點此查看目錄]
- C#簡易電影記錄管理系統:開發一[使用者登入]
- C#簡易電影記錄管理系統:開發二[增刪改查]
- C#簡易電影記錄管理系統:開發三[密碼修改]
- C#簡易電影記錄管理系統:開發四[日誌查看]
- C#簡易電影記錄管理系統:開發五[使用者註冊]
- C#簡易電影記錄管理系統:開發六[資料搜尋]
- C#簡易電影記錄管理系統:開發七[使用者分類]
- C#簡易電影記錄管理系統:開發八[資料備份]
- C#簡易電影記錄管理系統:完結篇[許可權分配]