批量从Execl把数据导入到sql中 效率挺高
2012-12-20 11:06
141 查看
根据下面的这个方法就可以得到表格中的数据信息。(有时候得不到有的单元格,看是不是因为表格中一个列中存在两个数据格式)
这个是这个方法的调用:
然后可以把经过处理的数据导入到sqlserver数据库:有时候会暴无效的列长度,可能是列 的长度超过了数据库定义的长度,在处理数据的时候要截取
#region 得到数据集,根据Execl路径 /// <summary> /// 得到数据集,根据Execl路径 /// </summary> /// <param name="ExeclPath">表格的路径</param> /// <param name="ds">返回的数据集</param> /// <returns>是否成功</returns> private bool GetDataSetByExeclPath(string ExeclPath, out DataSet ds) { bool isOK = true; ds = new DataSet(); Application.DoEvents(); try { string fileExt = System.IO.Path.GetExtension(ExeclPath); string mystring; if (fileExt.ToLower() == ".xls")//判断表的格式 { mystring = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + ExeclPath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; } else { mystring = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + ExeclPath + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; } System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(mystring);//创建连接 conn.Open(); DataTable dtDATAExcel = new System.Data.DataTable(); DataTable dtDATA = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);//得到所有表的信息 string table = ""; for (int i = 0; i < dtDATA.Rows.Count; i++)//循环所有表 { try { DataTable dt = new DataTable(); table = dtDATA.Rows[i][2].ToString().Trim();//得到表名 System.Data.OleDb.OleDbDataAdapter objadp = new System.Data.OleDb.OleDbDataAdapter("select * from [" + table + "]", conn); objadp.Fill(dt);//得到表格 if (dt.Rows.Count > 0) { ds.Tables.Add(dt); } } catch { } } conn.Close();//关闭连接 } catch { isOK = false; } return isOK; } #endregion
这个是这个方法的调用:
/// <summary> /// 导入表格 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnExecl_Click(object sender, EventArgs e) { ofdExcel.FileName = ""; if (ofdExcel.ShowDialog() == DialogResult.OK) { DataSet ds = new DataSet(); if (GetDataSetByExeclPath(ofdExcel.FileName, out ds)) { MessageBox.Show(ds.Tables.Count.ToString()); } } }
然后可以把经过处理的数据导入到sqlserver数据库:有时候会暴无效的列长度,可能是列 的长度超过了数据库定义的长度,在处理数据的时候要截取
#region 批量插入SQL表+ public int bulk_ins_table(DataTable _dt, string _tablename) /// <summary> /// 批量插入SQL表 /// 其中_dt的结构必须与_tablename指定的表结构完全一致 /// </summary> /// <param name="_dt"></param> /// <param name="_tablename"></param> /// <returns></returns> public bool bulk_ins_table(DataTable _dt, string _tablename) { bool isOK = true; try { System.Data.SqlClient.SqlBulkCopy sqlbulkcopy = new System.Data.SqlClient.SqlBulkCopy("这是连接字符串", System.Data.SqlClient.SqlBulkCopyOptions.UseInternalTransaction); sqlbulkcopy.DestinationTableName = _tablename;//数据库中的表名 sqlbulkcopy.WriteToServer(_dt); } catch //(Exception e) { //throw e; isOK = false; } return isOK; } #endregion
相关文章推荐
- 使用 SqlBulkCopy 批量从execl中导入数据
- Sql_使用meger语句提高数据批量操作效率
- excel中拼sql格式,批量导入数据
- Excel拼装Sql语句将数据批量导入数据库
- 大数据批量插入数据库使用(SqlBulkCopy )效率更高
- 数据批量导入远程SQL服务器的亲身实践
- 批量导入数据到SQL
- Oracle:从SQL文件批量导入数据
- winform Execl数据 导入到数据库(SQL) 分类: WinForm C# 2014-05-09 20:52 191人阅读 评论(0) 收藏
- Sql 截取、替换 字符串 ,数据批量导入
- winform Execl数据 导入到数据库(SQL)
- [置顶] 关于C++、C#实现EXCEL数据库批量导入数据库万行以上数据效率问题
- (总结) SQL Server Bulk Insert 批量数据导入
- (总结) SQL Server Bulk Insert 批量数据导入
- SQLCMD的介绍(mssqlserver批量导入大数据的sql 或者定时批处理 sql 或者导入)
- SqlBulkCopy 批量导入数据 转换表字段类型
- 使用SqlBulkCopy将datatable数据批量导入sqlServer
- asp.net批量导入execl数据,把整个execl里面的数据都导入数据库中
- SQL批量数据导入,性能测试
- SQL 函数、存储过程、触发器、级联删除、数据批量导入