开发者社区> cxycappuccino> 正文

[转]数据库连接方式读取不到Excel数据值的解决方法

简介: 由于工作的需要,最近做了一个读取Excel文件与CSV文件关联的数据处理程序,主要用于PDA采集数据的后期处理。 当时有两种方法可用来读取Excel数据,一种是引用Excel的类库,另一种是将其作为扩展数据文件,用ADO连接方式来处理。
+关注继续查看

由于工作的需要,最近做了一个读取Excel文件与CSV文件关联的数据处理程序,主要用于PDA采集数据的后期处理。

当时有两种方法可用来读取Excel数据,一种是引用Excel的类库,另一种是将其作为扩展数据文件,用ADO连接方式来处理。从性能、工作量等多个方面考虑,我毫不犹豫地选择了后面的方案来进行工作。

一、问题描述:

工作很顺利地便完成了,心底里有一点点高兴,对自己来讲,这种东西太小儿科化了(呵呵,有点自夸了,别当真^_^)。可是后面的过程中却遇到了较大的麻烦:凡是在Excel中打开的xls文件,如果单元格错误检查存在问题,那么其中的数据读取出来便是空(null)。具体体现在如果这个列为数值型,如果改为文本存储方式或其它方式,那么这些列的数据便读取不到。

二、问题分析:

经过多次测试发现问题都不能解决,除非修改列存储方式,但是这种工作量实在太大,根本没有可行性。冷静下来思考了一下,我估计是驱动程序的问题,便将连接方式如下,可是却出现“找不到可安装的ISAM错误”,实在是比较郁闷。

 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + "Extended Properties='Excel 11.0;'";

原来的连接方式为:

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + "Extended Properties='Excel 8.0; '";

说明:Excel8.0 对应office 2000,Excel 11.0对就office2003

三、问题解决:

后来经过搜索与分析,将连接方式改成如下,问题解决了:

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";

成功原因:

参数说明: Microsoft Jet 提供程序用于连接到 Excel 工作簿。在以下连接字符串中,Extended Properties 关键字设置 Excel 特定的属性。“HDR=Yes;”指示第一行中包含列名,而不是数据,“IMEX=1;”通知驱动程序始终将“互混”数据列作为文本读取。

注意http://msdn2.microsoft.com/zh-cn/library/ms254978.aspx 默认情况下,系统认为 Excel 数据源的第一行包含可用作字段名的列标题。如果不是这种情况,则必须将该设置关闭,否则,第一行数据将会消失,而被用作字段名称。这可通过向连接字符串的扩展属性添加可选的 HDR= 设置来完成。默认情况下(无需指定)是 HDR=Yes。如果没有列标题,则需要指定 HDR=No;提供程序将字段命名为 F1F2 等等。因为扩展属性字符串现在包含了多个值,所以必须用引号单独包起来。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#读取Excel表格中数据并返回datatable
在软件开发的过程中,经常用到从excel表格中读取数据作为数据源,以下整理了一个有效的读取excel表格的方法。   DataTable GetDataTable(string tableName,string leftTopCel,string rightbutCel) ...
1111 0
C# ASP.NET Webservice调用外部exe无效的解决方法
原文:C# ASP.NET Webservice调用外部exe无效的解决方法 最近用asp.net做webservice,其中有个功能是调用执行外部的exe(类似cmd中执行),但执行Process.Start之后就没有结果,同样代码在winform下正常,折腾两天终于找到解决方法 本文参考了以下网页,十分感谢 http://bbs.
1160 0
将Excel导入到DataTable (用ODBC方法连接)
///         /// 将Excel导入到DataTable (用ODBC方法连接)(LiPu)         ///         /// excel 路径         ///         ///         public DataTable Excel...
852 0
对象的继承关系在数据库中的实现方式和PowerDesigner设计
原文:对象的继承关系在数据库中的实现方式和PowerDesigner设计 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的关系,那么对于继承关系,该怎么在RDBMS中表示呢?一般来说有3种实现方式: Concrete ...
905 0
+关注
cxycappuccino
架构,编程语言相关技术专家
244
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载