C#从Excel导入到MSSQL
来源:互联网 发布:博拉网络 中金在线 编辑:程序博客网 时间:2024/06/08 07:30
方法一:采用OleDB读取EXCEL文件:
用这种方法读取Excel速度还是非常的快的,但这种方式读取数据的时候不太灵活,不过可以在DataTable 中对数据进行一些删减修改这种方式将Excel作为一个数据源,直接用Sql语句获取数据了。所以读取之前要知道此次要读取的Sheet(当然也可以用序号,类似dt.Row[0][0]。
if (fileType == ".xls") connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; else connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; OleDbConnection conn new OleDbConnection(connStr); DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
以上是读取Excel的Sheet名,xls和xlsx的连接字符串也不一样的,可以根据文件的后缀来区别。这里需要注意的一点,Excel里面只有一个Sheet,但通过这种方式读取Sheet可能会大于一个。
在使用过程中发现取出的Sheet和实际excel不一致, 会多出不少。目前总结后有两种情况:
1. 取出的名称中,包括了XL命名管理器中的名称(参见XL2007的公式--命名管理器, 快捷键Crtl+F3);
2. 取出的名称中,包括了FilterDatabase后缀的, 这是XL用来记录Filter范围的, 参见 http://www.mrexcel.com/forum/showthread.php?t=27225
对于第一点比较简单, 删除已有命名管理器中的内容即可;第二点处理起来比较麻烦, Filter删除后这些名称依然保留着,简单的做法是新增sheet然后将原sheet Copy进去
/// <summary> /// 读取Excel文件到DataSet中 /// </summary> /// <param name="filePath">文件路径</param> /// <returns></returns> public static DataSet ToDataTable(string filePath) { string connStr = ""; string fileType = System.IO.Path.GetExtension(fileName); if (string.IsNullOrEmpty(fileType)) return null; if (fileType == ".xls") connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; else connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; string sql_F = "Select * FROM [{0}]"; OleDbConnection conn = null; OleDbDataAdapter da = null; DataTable dtSheetName= null; DataSet ds = new DataSet(); try { // 初始化连接,并打开 conn = new OleDbConnection(connStr); conn.Open(); // 获取数据源的表定义元数据 string SheetName = ""; dtSheetName= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); // 初始化适配器 da = new OleDbDataAdapter(); for (int i = 0; i < dtSheetName.Rows.Count; i++) { SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"]; if (SheetName .Contains("$") && !SheetName .Replace("'", "").EndsWith("$")) { continue; } da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName ), conn); DataSet dsItem = new DataSet(); da.Fill(dsItem, tblName); ds.Tables.Add(dsItem.Tables[0].Copy()); } } catch (Exception ex) { } finally { // 关闭连接 if (conn.State == ConnectionState.Open) { conn.Close(); da.Dispose(); conn.Dispose(); } } return ds; }
0 0
- C#从Excel导入到MSSQL
- C# Excel表数据导入mssql
- C# 从Excel表中导入数据函数到DataSet
- C#将数据从datagridView中导入到Excel
- 从Excel导入到Access
- 从Excel导入到数据库
- DataGridView从excel导入、导出到excel
- excel-从excel导入数据到数据库
- mssql 导入excel
- 如何将excel文件导入到mssql中(dephi)
- 将Excel数据导入到MSSQL数据库里面
- 快速将excel导入到MSsql的方法
- asp.net/c#代码实现excel to mssql数据导入
- asp.net/c#代码实现excel to mssql数据导入
- C#开发EXCEL导入、导出支持MSSQL、ORACLE、ACCESS
- 一个从mysql导入数据库到mssql的根据
- 从Mssql导出数据到excel表中
- Excle导入到MSSql
- python3+PyQt5 创建网络应用-TCP客户端和TCP服务器
- RecyclerView抽取基类,item实现点击,增加分割线
- 中关村维修被黑
- Wininet编程之在windows环境下http协议编程
- 事务、试图、索引、备份和恢复
- C#从Excel导入到MSSQL
- 构建单页Web应用
- 快速接口测试---PostMan插件
- PHP http://localhost:63342/untitled1/index.php/Home URL格式访问不到报404 的解决方案
- SAP BW as an Enterprise Data Warehouse and How SAP HANA Changes the Game
- tensorflow mac 本机安装的坑
- 网页自动跳转 5种方法
- oracle中进行简单树查询(递归查询) ,PRIOR、CONNECT_BY_ROOT的用法
- Java基础总结之流