haoxiaobo

从C到C++又到.net, 有一些心得, 和大家交流下...
随笔 - 64, 文章 - 6, 评论 - 635, 阅读 - 18万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

谁是DAC2.8和jet4.0的接班人?

Posted on   HAL9000  阅读(657)  评论(0编辑  收藏  举报

从前在写读excel文件的程序时,会采用这样的oledb数据连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.xls;Extended Properties='Excel 8.0;HDR=YES;IMEX=0';

 

但是,在两种情况下,这个oledb的数据连接会出错:一是面对Excel 2007以上的版本的xlsx文件时,二是程序被部署在64位版的操作系统中,而且运行时的程序集被编译为64位或是“任何平台”时。

第一种情况会导致文件打不开,因为jet 4.0不能支持xlsx文件格式。

第二种情况则会在创建ole connection时出现 “Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine” 的问题。就算是你在64位系统下安装了msdac也不行,msdac里的组件只能被32位模式的程序集访问。

网上有很多人采用强制iis用32位模式运行的方法来解决问题,而且抱怨微软没有提供64位版的msdac组件。但做为重要的office更新,excel 2007版之后不可能不提供数据访问组件的全方面支持。

经过研究才知道,微软已经用新的玩意儿来接了msdac的班,正是因为这个原因,才没有继续在msdac上下功夫,也就没有了jet4.0之后的更新。

新的玩意儿叫Microsoft Access Database Engine, 缩写叫MS ACE, 现在最新版是2010版,这个组件分别发行了32位版与64位版,完整地支持目前所有的excel文件格式,当然还有所有的access文件格式,包括office 2007之前的旧版文件格式,用这个组件里的oledb provider也能一样能打开。

 

但是,你需要使用新的oledb连接字符串,如下:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\test.xls;Extended Properties='Excel 12.0;HDR=YES;IMEX=0';

 

这样的连接字符串可以用于任何office版本的文件格式。而且在windows 64bit上也运行正常。

 

MS ACE 下载地址在这里:  http://www.microsoft.com/en-us/download/details.aspx?id=13255

 

 

 

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2005-01-14 关于对象组件编写的一点想法
点击右上角即可分享
微信分享提示