本期概述
上一期我们学习并实现了该系统的数据备份功能。这一期我们来一起实现下该系统的数据恢复功能.数据恢复是指当数据因外界条件影响而丢失后,我们需要使用先前的备份来恢复数据,从而避免照成不必要的损失.
原理
这里我们的数据恢复主要分两步: ①读取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