C#簡易電影記錄管理系統:開發九[數據恢復]


本期概述

上一期我們學習並實現了該系統的數據備份功能。這一期我們來一起實現下該系統的數據恢復功能.數據恢復是指當數據因外界條件影響而丟失后,我們需要使用先前的備份來恢復數據,從而避免照成不必要的損失.

 

原理

這里我們的數據恢復主要分兩步: ①讀取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

相關推薦 [點此查看目錄]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM