ado读取excel出现字符串被截断而不完整的原因与解决办法

ado读取excel出现字符串被截断而不完整的原因与解决办法

ID:15215515

大小:515.00 KB

页数:4页

时间:2018-08-02

ado读取excel出现字符串被截断而不完整的原因与解决办法_第1页
ado读取excel出现字符串被截断而不完整的原因与解决办法_第2页
ado读取excel出现字符串被截断而不完整的原因与解决办法_第3页
ado读取excel出现字符串被截断而不完整的原因与解决办法_第4页
资源描述:

《ado读取excel出现字符串被截断而不完整的原因与解决办法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、易飞服务部ADO读取Excel出现字符串被截断而不完整的原因与解决办法分享人:熊鑫日期:2013/11/254易飞服务部前些日子处理了ADMB06(数据导入导出)的问题单,问题描述:插件位置字段超过255插入数据库就会截断。保存到数据库中就只有255的长度。插件位置是T类型的字段。按道理说不应该截取到255的长度。然后跟踪程序发现。他导入EXCEL的时候是用ADO直接连接EXCEL,直接读取的EXCEL里面的数据。最开始还以为是数据格式的问题,调试好久还是不行,于是在网上狂找资料,终于搞清楚了原因,原

2、来是因为在使用ADO.NET读取Excel表格时,OLEDB(Excel2000-2003一般是是Jet4.0,Excel2007是ACE12.0,即AccessConnectivityEngine,ACE也可以用来访问Excel2000-2003)会默认扫面Sheet中的前几行来决定数据类型. 4易飞服务部   Excel并不像Access一样,一列中的单元格的数据类型可能不一样,用ADO.NET读取Excel时,oledb(JET)会扫描sheet中前几行,默认8行(这个值可在注册表中设定)来决定

3、当前列的数据类型。    这个值是由下面注册表项的路径     Excel2000-2003: HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesExcel     Excel2007: HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice12.0AccessConnectivityEngineEnginesExcel2012:    中的TypeGuessRows值决定,其取值范围为十进制闭区间0

4、-16    考虑一列数据,如果前8行都是数字,那么JET扫描没有问题。     如果8行内的数据类型不一样,JET会采用一个都适合的数据类型来匹配,通常为varchar或unicodevarchar。     现在的问题是,前8行的数据如果短小,JET匹配了varchar,只有255字符。而实际可能是adLongVarChar或者其它更大的类型。          设置前面的TypeGuessRows=0,这样会查询16384行,查询完后匹配一个最合适的数据类型,不过这个长度对于我来说已经绰绰有余,

5、于是就用了0。     不过对于大文件,就可能会导致效率问题,具体的根据是实际情况而定。     再说一下如果决定前8行中使用varchar还是unicodevarchar: 4易飞服务部    JET会根据上面的注册表项的值来决定,这个值就是JET一次性扫描的行数,如这个值通常默认为8,也就是说JET在判定一列数据的类型时只扫描前8行来匹配一个最合适的数据类型,但是如果8行以内字符串在255个字符以内,8行以外的字符串却大于255个字符,那么这个时候使用ADO读取Excel就会出问题,会将后面大于2

6、55个字符的串截断。那么我们可改变那个注册表的值来解决该问题,但是这个值的范围规定在十进制0-16之间,为了保险起见可设置为0,那么这时会扫描整个页面再匹配合适的数据类型,这个时候就肯定不会出错,但这样也有个缺点,那就是Excel文件超级大的时候,就会引起效率问题。    4

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。