做上传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步里,关键代码如下:

View Code

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,问题居然解决了,代码如下:

View Code

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)相关推荐

  1. 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",如下图 这个问题 ...

  2. SAP MM Error message - Customizing incorrectly maintained – in transaction code ML81N

    Error message - Customizing incorrectly maintained –in transaction code ML81N I have encountered thi ...

  3. 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 ...

  4. No message found under code 'login.error' for locale 'zh'. 的解决办法

    在使用国际化的时候,出现了No message found under code 'login.error' for locale 'zh'. 这个错误. 想到这应该是一个识别不到国际化文件的问题吧, ...

  5. git clone的时候报error: RPC failed; result=18错误

    因业务需求,需要把内网gitlab仓库的地址对外网访问,在gitlab前端配置了一个nginx代理服务器,来实现需求,可以在git clone的时候报error: RPC failed错误 [root ...

  6. 如何处理resource not found for the segment XXXXX error message

    Created by Jerry Wang, last modified on Dec 10, 2015 使用Postman 测试Odata request时遇到如下error message: 原因 ...

  7. 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 ...

  8. 如何解决创建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上输入的参 ...

  9. 如何找到SAP CRM WebClient UI error message的来源

    Created by Jerry Wang, last modified on Mar 22, 2014 除了使用这篇blog介绍的方法之外, 本wiki提供了另外一种方法: 使用transactio ...

最新文章

  1. Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
  2. MySQL-通过MaxScale实现读写分离初探
  3. iOS - OC Copy 拷贝
  4. npy一维数组如何对给出的索引进行反选
  5. silverlight寻奇 - Graphite
  6. 深入解析软件测试行业!它是否存在前景和出路?
  7. java arraydeque poll,Java ArrayDeque pollLast()方法
  8. java兔子问题流程图_求龟兔赛跑的流程图 高手进来瞧瞧啊
  9. H5 App如此强悍,要降薪的恐怕已不只是iOS程序员
  10. WinHex V14.6 SR-2 注册码
  11. CentOS7 时间与网络时间同步
  12. linux flex安装包,安装flex builder for Linux在Ubuntu
  13. 32位计算机装64位操作系统,电脑装32位还是64位系统与硬件有关系吗
  14. 维修 空调 碰上 骗子
  15. React Native_React Native组件(ListViewFlatListSectionList)
  16. notepad++ JSON Viewer插件手动安装失败解决方案
  17. Linux下使用 tc 模拟网络延迟和丢包
  18. 最常用的五个网页JS特效代码:收藏本站、设为首页、刷新本页
  19. 大数据技术●降龙十八掌【目录】
  20. 学习同学们的博客经验

热门文章

  1. 【CentOS8】安装 mysql 5.7
  2. mysql性能优化:my.cnf配置文件
  3. 【SSL】java keytool工具操作PCKS12证书库
  4. idea没有RunDashboard解决办法
  5. java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一)
  6. display属性_前端基础:Grid 布局教程,重新复习grid布局的容器和项目属性
  7. 用shell获取mysql主从状态_shell监控MySQL主从状态脚本两则
  8. java 强弱软虚_Java的四种引用,强弱软虚,用到的场景
  9. PyTorch教程(四):维度变换
  10. Vector源码分析