Chinaunix首页 | 论坛 | 博客
  • 博客访问: 875539
  • 博文数量: 366
  • 博客积分: 10267
  • 博客等级: 上将
  • 技术积分: 4290
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:04
文章分类

全部博文(366)

文章存档

2012年(366)

分类: 系统运维

2012-03-06 17:08:42

本期概述

上一期我们讲到了数据备份, 数据备份是用于当数据因系统故障或者人为的误操作而丢失后,我们可以通过先前的数据备份来恢复受损的数据,从而挽救数据丢失而造成的损失.这一期我们来共同学习下数据恢复, 数据恢复是 指当数据因外界条件影响而丢失后,我们需要使用先前的备份来恢复数据,从而避免照成不必要的损失.


原理

主要原理 分两步: ①打开Excel文件后,通过 OleDb应用程序接口,读取Excel文件数据, 然后将数据临时性存到 DataSet 数据集中. ②遍历 DataSet 数据集的表中的所有行数据, 执行 SqlServer 数据库操作,将数据插入到 Sql Server中;最后调用Sql Server查看数据的方法 将导入的数据刷新并显示在 DataGridView上.

界面设计

我们继续在管理界面 FrmManager.cs 增加一个 导入Excel 按钮 Name:btnImportExcel 如下图

写代码前 我们需要新增一个 使用命名空间 System.Data.OleDb 用于连接和操作 Excel数据文件

using System.Data.OleDb; //建立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 连接字符串 (类似于Sql Server的SqlConnection)
OleDbConnection OleDbConn;

try
{
//创建OleDbConn连接
OleDbConn = new OleDbConnection(connExcel);

OleDbConn.Open(); //打开OleDbConnection 连接

//创建 Excel 数据表
System.Data.DataTable dtExcel = OleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

//获取excel表
string tableName = dtExcel.Rows[0][2].ToString().Trim();
tableName = "[" + tableName.Replace("'", "") + "]";

//通过Sql语句从Excel里获取数据 这里我们只需要 电影名称 导演 发行日期 3列数据 因为后期插入到Sql Server中 Id是自动争长的
string queryExcel = "select 电影名称,导演,发行日期 from " + tableName;

//创建数据集ds 用于后期装载 OleDbDataAdapter 中的获取的结果
DataSet ds = new DataSet();

//创建 OleDbDataAdapter数据适配器 装载 2个参数 Excel查询语句和 Excel数据连接
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(queryExcel, connExcel);

//将oleAdapter中的结果 填充到 Record 数据集中
oleAdapter.Fill(ds, "Record");

//执行完成后 关闭 OleDbConn数据连接
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] + "')";

//创建Sql Server连接
SqlConnection conn = new SqlConnection(connStr);

//创建 Sql指令 来执行 插入语句 和 数据库连接
SqlCommand cmd = new SqlCommand(sqlInsert, conn);

//打开数据库
conn.Open();

//cmd.ExecuteNonQuery() 返回的是执行操作成功的行数
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)
{
//首先使用 OpenFileDialog提供的文件过滤器 Filter 来打开我们需要导入的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; //则Excel的文件全路径(包括文件名) 赋给filePath
}
if (fullPath == "") //如果选择的文件路径为空 即未选择任何文件
{
MessageBox.Show("未选择Excel文件");
return;
}
//调用导入 Excel文件方法 需要2个参数 excel文件全路径和 DataGridView 名称
ImportExcel(fullPath, dgvManager);
}



好了我们来运行下看看

1.首先我们把数据库数据清空

2.点击 导入Excel 按钮 选择Excel文件


3. 显示添加成功

4.最终数据被导入到Sql Server 并显示在DataGridView上

这样我们的数据恢复就做完了 下期 我们来共同学习下 管理员如何给普通用户分配功能权限 :)


附上源代码

MovieRecordManagementSystem09.zip

阅读(1264) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~