千家信息网

如何用C#解决Oledb连接Excel数据类型不统一的问题

发表于:2024-10-09 作者:千家信息网编辑
千家信息网最后更新 2024年10月09日,本篇内容主要讲解"如何用C#解决Oledb连接Excel数据类型不统一的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何用C#解决Oledb连接Ex
千家信息网最后更新 2024年10月09日如何用C#解决Oledb连接Excel数据类型不统一的问题

本篇内容主要讲解"如何用C#解决Oledb连接Excel数据类型不统一的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何用C#解决Oledb连接Excel数据类型不统一的问题"吧!

在使用Microsoft.Jet.OLEDB.4.0连接Excel,进行读取数据,相对使用传统的COM来读取数据,效率是很高的。但相对传统COM操作Excel来说,及存在数据类型转换的问题。

因为使用OLEDB连接Excel读取数据时,需要确定数据的类型。默认情况使用连接字符串:

view source

print ?

1. string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelFile + ";Extended Properties='Excel 8.0;'";

使用上面的连接字符串连接Excel时,可能会遇到数据类型不一致的问题。所谓数据类型不一致,是指同一列里面数据类型可能出现多种,如浮点数、字符串、日期等;当出现此类情况时,读取出来的数据就为空,甚至会报错,如"非法的日期格式"等异常。出现这种问题,我们大家都会想到把数据全部都按字符数据来读取,但是按什么数据类型来读取不是我们能控制的,是OLEDB控制的,至少暂时我还没有找到能控制输出数据类型的方法。因为我当初也尝试使用convert,cast函数对输出的列进行类型转换,但oledb连接Excel时,使用的SQL不支持这些函数。因此只能从其他角度来解决该问题。我也在网上搜索了很多解决方法,最全面的解决方法是:http://www.douban.com/note/18510346/。下面列出了网上出现解决该问题方法的比较:

这里提供一个更加方便的办法,不过前提是***行必须是作为字段名或者***行的数据类型就为字符型。这样一说,大家就明白了。首先修改连接字符串为:

view source print ?  //2003(Microsoft.Jet.Oledb.4.0) string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath);  //2010(Microsoft.ACE.OLEDB.12.0) string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", excelFilePath);

这里将HDR设为NO,因为我就是将***行做为数据读取,而IMEX=1就表示根据前8行判断列的数据类型,如果有字符型数据,那么就强制混合数据转换为 文本。这里就明白为什么要保证***行为字符型的原因了。能将列的数据类型强制设为字符型,那么列中出现什么类型的数据都不怕了。需要做的工作就是,在获取 完数据后,将字段名重新设置,并删除***条记录即可。代码如下:

view source print ? 01. DataTable dt = new DataTable(); 02.    03. using(OleDbCommand cmd = new OleDbCommand()){ 04.     cmd.Connection = conn; 05.     cmd.CommandType = CommandType.Text; 06.     cmd.CommandTimeout = 6; 07.     cmd.CommandText = string.Format("select * from [{0}$]", sheetName); 08.    09.     OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 10.     adapter.Fill(dt); 11. } 12.    13. if (dt.Rows.Count > 0) { 14.     DataRow dr = dt.Rows[0]; 15.    16.     for (int col = 0; col < dt.Columns.Count; col++) { 17.         dt.Columns[col].ColumnName = dr[col].ToString(); 18.     } 19.    20.     dt.Rows[0].Delete(); 21.     dt.AcceptChanges(); 22. }

到此,相信大家对"如何用C#解决Oledb连接Excel数据类型不统一的问题"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

数据 类型 字符 问题 方法 字符型 字符串 C# 统一 控制 一致 传统 内容 函数 字段 就是 情况 日期 面的 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 没人玩的服务器游戏 r删除数据第一行数据库 黄浦区一站式网络技术优点 微信服务器登录不上怎么办 服务器有防火墙安全性 使命召唤读取不了服务器 电子商务软件开发试题答案 游戏怎么开服务器 服务器内存条是单数 安防管理服务器指什么 网络安全和编程哪个好赚外快 服务器的电源线叫什么 武汉应用软件开发报价 画软件开发流程图的软件 贵州互联网养老软件开发 网络技术地址分类用填类么 登录只狼服务器怎么取消 应用服务器配置与管理报告 遂宁软件开发规范 三明工贸学校网络安全项目 消防与网络安全哪个更重要 坦克世界怎么进亚洲服务器 vb实现随机取不同数据库 国庆前网络安全工作部署 使用正常的服务器突然拒绝了密码 网络安全法最新司法解释 烟台顺城网络技术有限公司 北京朝阳区互联网科技有限公司 一个网址的服务器域名 网上招聘网络安全
0