Excel连接字符串在.NET中的应用
转:https://www.cnblogs.com/jaxu/archive/2011/07/29/2121022.html
介绍几种在.NET中直接连接Excel作为数据源的几种方法以及连接字符串的说明。
Microsoft Jet OLE DB 4.0
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
64位机器可以看这里http://www.connectionstrings.com/Articles/Show/using-jet-in-64-bit-environments。
如果上面的连接字符串不奏效,可以尝试下面的格式。有些早期版本的2003格式的Excel文件需要在连接字符串中添加OLEDB前缀作为Provider标识。
OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";
连接字符串中的双引号是必须的,请注意在代码中进行转义。
C#,C++中使用\"对双引号进行转义。
VB6,VBScript中使用""对双引号进行转义。
XML(或web.config)中使用"对双引号进行转义。
"HDR=Yes;"用于指示将Excel表格中的第一行作为标题,此时在查询语句中可以将标题作为数据表的字段名使用。"HDR=No;"则表示将Excel表格中的所有行都作为数据内容而不包含标题,此时在查询语句中需要使用F1,F2等作为字段名。如第一列为F1,第二列为F2等,以此类推。
"IMEX=1;"用于指示始终将Excel单元格中的内容作为text类型的数据。该选项会对Excel文件内容的回写产生影响。
SQL语法:"Select [Column Name One]", [Column Name Two] From [Sheet One$]"。注意Excel wooksheet的名字必须以"$"结尾并且包含在方括号中。列名如有需要也应当包含在方括号中(如列名中包含有空格其它特殊字符等)。
如何通过程序获取指定Excel文件中各个Sheet的名称?
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
string sqlStr = "Select * From " + dt.Rows[0]["TABLE_NAME"].ToString();
}
除了表名和列名的写法有所不同外,SQL语句的使用方法和在SQL Server中基本相同。在.NET中数据访问层仍然可以使用OleDbHelper类,使用方法与普通的数据库一样。
另外,如果指定的Excel文件需要密码才能打开,你需要在连接字符串中提供连接密码,否则打开Excel文件会失败。具体的内容可以看这里,
http://www.connectionstrings.com/Articles/Show/how-to-open-password-protected-excel-workbook
ACE OLEDB 12.0
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myOldExcelFile.xls;Extended Properties="Excel 12.0;HDR=YES";
使用ACE 12.0可以连接早期版本(97-2003)的Excel文件,对于2003以后版本的Excel也通用,但前提是Office组件中安装了对应的ACE,否则无法使用。可以去下面的地址下载ACE组件。
http://www.microsoft.com/download/en/details.aspx?id=13255
该连接字符串同样适用于Xlsb和Xlsm格式的Excel文件。
Microsoft Excel ODBC Driver
Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;
使用ReadOnly=0表示连接是只读的,所有对数据源的更新操作将不可回写。
Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\MyExcel.xls;ReadOnly=0;
.NET xlReader for Microsoft Excel
Data Source =c:\myExcelFile.xlsx;HDR=yes;Format=xlsx;
注意上面的连接字符串中使用了HDR=yes参数,表示将Excel数据表的首行作为标题。
在C# 打开execl2016文件时候出现了 conn.ServerVersion”引发了System.InvalidOperationException异常,参考本文后安装了Office组件中对应的ACE,从而解决了问题。
Excel连接字符串在.NET中的应用的更多相关文章
- Excel连接字符串(Oledb)
Excel的连接字符串参数详解 2011-07-27 15:43:50| 分类: 编程专栏 | 标签:excel 连接字符串 参数 含义 |字号大中小 订阅 程序中读取Excel ...
- 常用的连接字符串(vs中连接sqlserver)方便随时查看
Sql Server身份验证有两种,一种是Windows身份验证,还有一种是Sql Server 身份验证 Windows身份验证连接字符串: string connectionString = &q ...
- 【转载】两个Web.config中连接字符串中特殊字符解决方案
userid = test password = aps'"; 那么连接字符串的写法为: Provider=SQLOLEDB.1;Password="aps'"&quo ...
- 2、Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)
2.Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅. 1)SQLite Class.forNa ...
- .NET SQL Server连接字符串句法
.NET SQL Server连接字符串句法 数据库的连接性已经发展成为应用程序开发的一个标准方面.数据库连接字符串现在已经成为每个项目的标准必备条件.我发现自己为了找到所需要的句法,经常要从另外一个 ...
- 第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获得连接字符串
第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获 ...
- 使用OLEDB读取不同版本Excel数据的连接字符串设置
摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的/// summary // ...
- OLEDB 连接EXCEL的连接字符串IMEX的问题(Oledb)
今天碰到一个问题需要想EXCEL表中写数据,折腾了好久才发现是IMEX惹得祸,所以记录下提醒自己,也希望大家不要出同样的错. 碰到问题:使用语句 "insert into [Sheet1$] ...
- C# 使用OLEDB读取不同版本Excel数据的连接字符串
用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的 /// <summary&g ...
随机推荐
- springBoot上传文件时MultipartFile报空问题解决方法
springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...
- bug、兼容性、适配问题
1.input type=“number” 在火狐上限制长度会有问题: 1.maxlength 不管用 2.正则或js匹配限制长度后,给这个input赋值时候末尾三位(有可能是几位,我遇到的是三位 ...
- iphoneX 适配
1.iphoneX的尺寸 375*812 上边有44px的危险区,下边有34px的危险区,剩下的是安全区. 2.viewport设值cover <meta name="viewp ...
- MySQL查看所有视图的命令
有时为了查看特定数据库中所建立的所有视图,可以使用这个命令: 因为,视图其实就是一张虚拟的表,所有也可以认为是一张表,所有是 show table, 而它由于普通的表有所不同,所以有 status ...
- lucene源码分析(8)MergeScheduler
1.使用IndexWriter.java mergeScheduler.merge(this, MergeTrigger.EXPLICIT, newMergesFound); 2.定义MergeSch ...
- 关于EF Unit of Work Repository的简单用法
其实ef本身就是unit of work+repository的 其中继承自DbContext的类就是unit of work context中的DbSet<T>属性就是repositor ...
- 利用jquery.backstretch插件,背景切换
//首页自动更换背景特效开始============================================1.引用文件<script src="jquery.js" ...
- 谷歌眼镜能给Apple Watch带来啥前车之鉴?
当下,你想不听到Apple Watch的消息都难.这款智能手表在三月初发布时,有关它的新闻报道铺天盖地.记者们在博客上对发布会的每个阶段进行了实况报道,苹果粉丝们通过博客. 推特和YouTube视频对 ...
- ajax请求下载Execl表
Execl表是经常要用到的存放二位数据的表格,Java也可以直接操作Execl表,经常用到的方式就是jxl和poi. 在这次项目中,我用到的poi往Execl中写数据,刚开始设计的是前端发送一个aja ...
- graphviz 的节点形状
graphviz 的节点可以定义不同的外形,比如下面的定义, digraph tt1{ a[shape=box]; c[shape=lpromoter]; d[shape=do ...