解决方案 »

  1.   

    我最讨厌的就是去读取excel的数据了,特别是用ole的方式读取
    excel有很多bug,2003里面,2007里面我没试过,反正到了2007的版本的时候,我基本上放弃了excel的直接读取,我都要求别人手动将excel转换成txt,我再读取的。我想问下,你写的程序是bs的,还是cs的,因为你的这几个异常全都都是在oleconnection构造的时候出现的。如果是bs的,那么我要确保你的读取操作到底是在服务端的代码还是客户端的代码上执行的,如果是客户端的代码,比如某些ocx上,那么就要求客户端也要安装provider了。如果是cs的,那么你的读取时在客户端还是服务端,因为你只在服务端安装了provider
      

  2.   

    谢谢 jy251 的回复!这个问题从表面上来看已经解决了,因为客户已经几天没有发生过这种问题了!
    然后回答你的问题:
    1. 这个程序是BS版的,客户的Excel是从另外一个软件里导出的,而且只支持Excel2003
    2. 异常确实全部都是从OledbConnection抛出的,在服务器端执行的,因为客户是企业内网,而且一个excel的大小是小于200KB的,所以我都是把Excel上传到服务器上然后在进行excel的读取
    3. Provider本身没有问题,因为是有时成功,有时失败的经过几天的分析,得到了如下结论:
    1. 发生问题时,IISReset可以解决,所以问题就极有可能发生在IIS上面,然后客户这次出问题时,我没有做IISReset而是做了IIS的垃圾回收,然后在导入Excel,成功了
    2. 所以感觉是我们部署的.net 项目在iis中做的垃圾回收不好,从而可能导致iis假死的情况,所以导致excel导入的不正常,然后我做了6个时间点的垃圾回收,然后问题基本上不出现了
    3. 我的方案里也有不太好的一面,就是做了垃圾回收之后,页面好像需要重新做编译一样,但是打开一次页面之后,后面在打开同页面就会很快
      

  3.   

    不推荐用oledb读取excel确实很容易出错。
    尝试ocw或者专门的库吧NPoi之类的
      

  4.   


    谢谢你,以后会考虑Oledb之外的,因为这个项目里一开始用的是oledb,读取很方便,而且在本机环境和测试环境没有出现过问题,所以就延用了,然后不晓得生产环境会出现这个问题。以前做Java的时候用过jxl和poi,感觉还是很好的。
      

  5.   

    谢谢你,我直接把底层读Excel的方法换成了NPOI了,目前运行还算正常,客户正在跟踪的了,希望不要在报出问题了。