No error message available, result code: E_FAIL(0x80004005)
做上传Excel文件这个功能的时候,遇到个奇怪的事情。
我的程序里上传Excel文件的过程是这样的:
1.将用户选择上传的文件保存到服务器上
2.使用 Provider=Microsoft.Ace.OLEDB.12.0 打开这个文件,然后读取文件内容,加载到DataTable里
关键在于上面第2步,本地开发环境怎么debug都是没问题的;一旦发布到服务器上,文件size小一点的没有问题,大于大约1M的话,就会报错,
错误有2个(不是同时出现):
a) external table is not in the expected format
b) No error message available, result code: E_FAIL(0x80004005)
上面第2步里,关键代码如下:
string strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=Excel 12.0 Xml;";OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", strConn);DataSet ds = new DataSet(); oda.Fill(ds); //error
后来,在Provider里加了HDR=Yes; IMEX=1,问题居然解决了,代码如下:
string strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\";";
查了一下微软官方的资料,找出了HDR, IMEX的相关解释:
HDR,即Header Row,HDR=Yes则表明Excel文件里第一行作为header,不作为数据考虑。比如,把Excel文件里数据读入到DataTable,HDR=Yes,则Excel文件里第一行作为这个DataTable的字段名。HDR的Default值是Yes。
IMEX,即Import/Export Mode,IMEX的Default值是2(?待确定)有3种:
IMEX=0 is Export mode //Write Only
IMEX=1 is Import mode //Read Only
IMEX=2 is Linked mode (full update capabilities) //Read/Write
当IMEX=1时,即Import Mode,在读取Excel文件时,如果该文件的某列存在Mixed Data的情况(比如数字和字符串结合的情况:CN123),会把该单元格里的值的类型转换成注册表里ImportMixedTypes(win7路径:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Jet/4.0/Engines/Excel)的值。比如ImportMixedTypes=text,则把CN123的类型转成text型,这样,就不会出现异常情况了(当然还要考虑TypeGuessRows,这里不赘述)。
当IMEX=0或2时,在读取Excel文件时,会忽略掉注册表里的ImportMixedTypes,转而以MajorityType类型返回单元格里的数据。
TypeGuessRows,ImportMixedTypes需要在注册表里手动更改。ImportMixedTypes共有两种类型:MajorityType和Text,它的Default值是Text。
我遇到的问题虽然解决了,但还是没搞清楚问题的症结:
在没有加HDR=Yes; IMEX=1时,文件size大约小于1M的话,功能是没问题的(列里有Mixed Data情形);
当大于1M的时候,只有加上HDR=Yes; IMEX=1,功能才正常。
参考资料:
http://support.microsoft.com/kb/257819
http://office.microsoft.com/en-us/access-help/initializing-the-microsoft-excel-driver-HP001032159.aspx
http://www.instantpages.ltd.uk/ADODB_WP.htm
转载于:https://www.cnblogs.com/bobliu/archive/2012/07/05/2573460.html
No error message available, result code: E_FAIL(0x80004005)相关推荐
- gitlab报错 fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200解决方案
gitlab报错 "fatal: index-pack failed error: RPC failed; result=18, HTTP code = 200",如下图 这个问题 ...
- SAP MM Error message - Customizing incorrectly maintained – in transaction code ML81N
Error message - Customizing incorrectly maintained –in transaction code ML81N I have encountered thi ...
- github clone报错error: RPC failed; result=56, HTTP code = 200
报错信息为: error: RPC failed; result=56, HTTP code = 200 fatal: The remote end hung up unexpectedly fata ...
- No message found under code 'login.error' for locale 'zh'. 的解决办法
在使用国际化的时候,出现了No message found under code 'login.error' for locale 'zh'. 这个错误. 想到这应该是一个识别不到国际化文件的问题吧, ...
- git clone的时候报error: RPC failed; result=18错误
因业务需求,需要把内网gitlab仓库的地址对外网访问,在gitlab前端配置了一个nginx代理服务器,来实现需求,可以在git clone的时候报error: RPC failed错误 [root ...
- 如何处理resource not found for the segment XXXXX error message
Created by Jerry Wang, last modified on Dec 10, 2015 使用Postman 测试Odata request时遇到如下error message: 原因 ...
- How to deal with error message Could not start the app due to a configuration problem
Created by Jerry Wang, last modified on Dec 03, 2015 Container ushell getService NavTargetResolution ...
- 如何解决创建Account时的error message BP category 2 does not fit the data in category 1
Created by Jerry Wang on Mar 04, 2014 当试图创建一个Corporate Account时,遇到如下error message: 通过debug发现从UI上输入的参 ...
- 如何找到SAP CRM WebClient UI error message的来源
Created by Jerry Wang, last modified on Mar 22, 2014 除了使用这篇blog介绍的方法之外, 本wiki提供了另外一种方法: 使用transactio ...
最新文章
- Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
- MySQL-通过MaxScale实现读写分离初探
- iOS - OC Copy		拷贝
- npy一维数组如何对给出的索引进行反选
- silverlight寻奇 - Graphite
- 深入解析软件测试行业!它是否存在前景和出路?
- java arraydeque poll,Java ArrayDeque pollLast()方法
- java兔子问题流程图_求龟兔赛跑的流程图 高手进来瞧瞧啊
- H5 App如此强悍,要降薪的恐怕已不只是iOS程序员
- WinHex V14.6 SR-2 注册码
- CentOS7 时间与网络时间同步
- linux flex安装包,安装flex builder for Linux在Ubuntu
- 32位计算机装64位操作系统,电脑装32位还是64位系统与硬件有关系吗
- 维修 空调 碰上 骗子
- React Native_React Native组件(ListViewFlatListSectionList)
- notepad++ JSON Viewer插件手动安装失败解决方案
- Linux下使用 tc 模拟网络延迟和丢包
- 最常用的五个网页JS特效代码:收藏本站、设为首页、刷新本页
- 大数据技术●降龙十八掌【目录】
- 学习同学们的博客经验
热门文章
- 【CentOS8】安装 mysql 5.7
- mysql性能优化:my.cnf配置文件
- 【SSL】java keytool工具操作PCKS12证书库
- idea没有RunDashboard解决办法
- java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一)
- display属性_前端基础:Grid 布局教程,重新复习grid布局的容器和项目属性
- 用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则
- java 强弱软虚_Java的四种引用,强弱软虚,用到的场景
- PyTorch教程(四):维度变换
- Vector源码分析