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);
}