转: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中的应用的更多相关文章

  1. Excel连接字符串(Oledb)

    Excel的连接字符串参数详解 2011-07-27 15:43:50|  分类: 编程专栏 |  标签:excel  连接字符串  参数  含义   |字号大中小 订阅     程序中读取Excel ...

  2. 常用的连接字符串(vs中连接sqlserver)方便随时查看

    Sql Server身份验证有两种,一种是Windows身份验证,还有一种是Sql Server 身份验证 Windows身份验证连接字符串: string connectionString = &q ...

  3. 【转载】两个Web.config中连接字符串中特殊字符解决方案

    userid =  test password = aps'"; 那么连接字符串的写法为: Provider=SQLOLEDB.1;Password="aps'"&quo ...

  4. 2、Java应用中常见的JDBC连接字符串(SQLite、MySQL、Oracle、Sybase、SQLServer、DB2)

    2.Java应用中常见的JDBC连接字符串 Java应用中连接数据库是不可或缺的,于是便整理一些可能用到的JDBC的jar包及其相匹配的URL,以备日后查阅. 1)SQLite Class.forNa ...

  5. .NET SQL Server连接字符串句法

    .NET SQL Server连接字符串句法 数据库的连接性已经发展成为应用程序开发的一个标准方面.数据库连接字符串现在已经成为每个项目的标准必备条件.我发现自己为了找到所需要的句法,经常要从另外一个 ...

  6. 第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获得连接字符串

    第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获 ...

  7. 使用OLEDB读取不同版本Excel数据的连接字符串设置

    摘要: 用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的/// summary // ...

  8. OLEDB 连接EXCEL的连接字符串IMEX的问题(Oledb)

    今天碰到一个问题需要想EXCEL表中写数据,折腾了好久才发现是IMEX惹得祸,所以记录下提醒自己,也希望大家不要出同样的错. 碰到问题:使用语句 "insert into [Sheet1$] ...

  9. C# 使用OLEDB读取不同版本Excel数据的连接字符串

    用OLEDB通过设置连接字符串可以像读取sqlserver一样将excel中的数据读取出来,但是excel2003和excel2007/2010的连接字符串是不同的 /// <summary&g ...

随机推荐

  1. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...

  2. bug、兼容性、适配问题

    1.input   type=“number” 在火狐上限制长度会有问题: 1.maxlength 不管用 2.正则或js匹配限制长度后,给这个input赋值时候末尾三位(有可能是几位,我遇到的是三位 ...

  3. iphoneX 适配

    1.iphoneX的尺寸  375*812   上边有44px的危险区,下边有34px的危险区,剩下的是安全区. 2.viewport设值cover <meta name="viewp ...

  4. MySQL查看所有视图的命令

    有时为了查看特定数据库中所建立的所有视图,可以使用这个命令: 因为,视图其实就是一张虚拟的表,所有也可以认为是一张表,所有是 show table, 而它由于普通的表有所不同,所以有 status   ...

  5. lucene源码分析(8)MergeScheduler

    1.使用IndexWriter.java mergeScheduler.merge(this, MergeTrigger.EXPLICIT, newMergesFound); 2.定义MergeSch ...

  6. 关于EF Unit of Work Repository的简单用法

    其实ef本身就是unit of work+repository的 其中继承自DbContext的类就是unit of work context中的DbSet<T>属性就是repositor ...

  7. 利用jquery.backstretch插件,背景切换

    //首页自动更换背景特效开始============================================1.引用文件<script src="jquery.js" ...

  8. 谷歌眼镜能给Apple Watch带来啥前车之鉴?

    当下,你想不听到Apple Watch的消息都难.这款智能手表在三月初发布时,有关它的新闻报道铺天盖地.记者们在博客上对发布会的每个阶段进行了实况报道,苹果粉丝们通过博客. 推特和YouTube视频对 ...

  9. ajax请求下载Execl表

    Execl表是经常要用到的存放二位数据的表格,Java也可以直接操作Execl表,经常用到的方式就是jxl和poi. 在这次项目中,我用到的poi往Execl中写数据,刚开始设计的是前端发送一个aja ...

  10. graphviz 的节点形状

    graphviz 的节点可以定义不同的外形,比如下面的定义, digraph tt1{     a[shape=box];     c[shape=lpromoter];     d[shape=do ...