惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
美团技术团队
J
Java Code Geeks
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
宝玉的分享
宝玉的分享
博客园 - Franky
Y
Y Combinator Blog
爱范儿
爱范儿
H
Help Net Security
腾讯CDC
G
Google Developers Blog
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
博客园_首页
C
Check Point Blog
博客园 - 三生石上(FineUI控件)

博客园 - 痴人说梦

批量清除数据库中被植入的垃圾信息 asp.net(C#) 远程获取网页内容代码分享 JavaScript有关的10个怪癖和秘密 js javascript 鼠标控制图片左右滚动带自动翻滚,图片滑动新闻展示 - 痴人说梦 asp.net2.0邮箱发送代码 JS解析,格式化日期 JavaScript 实用脚本,很好,珍藏起来[转贴] WinForms / 23个.NET开源项目 使用js获取QueryString的方法小结 js实现图片高清晰等比缩小 ASP.NET使用NPOI类库导出Excel jQuery获取Select选择的Text和 Value(转) - 痴人说梦 - 博客园 IT项目管理工具总结 - 痴人说梦 - 博客园 有关类及类之间,类成员代码执行顺序链接 window.opener 的用法 用js进行url编码后用php反解以及用php实现js的escape功能函数总结 JS得到当前鼠标的位置 JCalendar 日历控件 div定位 鼠标放在按钮上显示层提示 - 痴人说梦 - 博客园
解决Windows Server2008R2中导入Excel不能使用Jet 4.0
痴人说梦 · 2012-05-08 · via 博客园 - 痴人说梦

由于CRM系统在部署公司内部使用的时,为了能够使用8G的内存,所以操作系统使用了Windows Server2008R2(Windows Server2008R2是64位系统,同时配置IIS7.0),但是系统在部署后,测试时发现CRM系统中的导入功能不能使用,后经过调试发现从Excel中取数据,它速度快也很方便的代码居然出现了异常,具体代码如下:

string strConn = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” +  strFileName + “;” + “Extended Properties=Excel 8.0;”;
OleDbDataAdapter ExcelDA = new OleDbDataAdapter(“SELECT * FROM [" + strSheet + "$]“, strConn);

DataSet dstExcel = new DataSet();
ExcelDA.Fill(dstExcel, “ExcelInfo”);

在上面代码中一直提示“无法找到此类型的驱动”,既然没有驱动,就装了OFFICE的组件,测试后还是一样报此错误,所以就上网搜索得知IIS7会支持一部分32位DLL,但对于与底层绑定较深的组件却不支持。Jet 4.0显示属于后一种组件,微软已经不支持Jet 4.0的升级,所以目前没有,今后也不会再出现Jet 4.0的64位版本,意思说这个组件将无法使用在64位和IIS7.0中。

接着后来再去查找资料说,可以把将应用程序池的Enable 32 bit选项设为True,但IIS的稳定性和兼容性不太好,系统中还用到了Oracle Client,在64位系统一定要使用64位的DLL。所以无法把IIS中应用程序池设置成为32位的应用池的方法来解决这个问题。

只能接续网络搜索终于有了可以在64位置上使用EXCEL的替代方案,使用Microsoft.ACE.OLEDB对Excel进行操作。修改后的脚本如下:

string strConn = “Provider=Microsoft.ACE.OLEDB.12.0;” + “Data Source=”+  strFileName + “;” + “Extended Properties=’Excel 12.0;HDR=YES’”;
OleDbDataAdapter ExcelDA = new OleDbDataAdapter(“SELECT * FROM [" + strSheet + "$]“, strConn);

DataSet dstExcel = new DataSet();
ExcelDA.Fill(dstExcel, “ExcelInfo”);

注意’Excel 12.0;HDR=YES’处的单引号不能少。可是测试后还是不能使用,最后才继续搜索资料得知还需要安装一个“AccessDatabaseEngine_X64”驱动程序,这样就可以解决64位EXCEL的导入问题。果然这段代码终于成功,最终导入的问题也解决了。

经过测试,发现使用Microsoft.ACE.OLEDB对Excel进行操作解决虽然64位为体代码在32位windows server 2003操作系统中居然不能用,为了能够让CRM系统的excel导入程序能够在64位操作系统和32位系统都能用,最后解决方法是在web.config的配置文件里增加一个OSType的参数设置,如果在32的操作系统,就使用以前的导入代码,如果是64位置系统我们就使用后来替代方案。