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

相关推荐 [点此查看目录]

posted @ 2012-03-06 07:21  SilverSky(Jason)  阅读(4822)  评论(10编辑  收藏  举报