OleDB读取CSV文件的字符格式问题
在使用OleDB读取完CSV文件生成的DataSet中,有一些列的内容被改变。有列A,在CSV中该列的值有:F5;F7;aaa;bbb;等等。
但在生成的DataSet中,这些值就变成:5;7;null;null;等等。(含有数字的字符串被转成数值,纯字符组成的字符串被转成null)
我在调试的过程中发现,这一列的object类型为decimal。 而且其他列没有问题。
最后,找到一个解决办法,就是把单元格格式设置为"Text",默认为"Number"。
想请教一下:
1、为什么CSV用Excel打开后,单元格格式默认会是"Number"。这和文件本身的或者打开时候选择的编码方式是否有关系?
2、为什么所有单元格都是"Number"类型,而只有这一列会转为decimal格式,是因为"F5"这类的值有什么特定含义会被转译吗?(我在测试过程中,把该列的内容"F5";"F7"改为"M5";"M7"后,生成的DataSet正常。)
希望遇到过这类问题的朋友们分享一下解决方案。有兴趣的朋友们也可以试试。谢谢……。 --------------------编程问答-------------------- 从没人有遇到过这种问题? --------------------编程问答--------------------
此贴注定要沉?
Oh No................. --------------------编程问答--------------------
分点羹
--------------------编程问答-------------------- 好久以前的。。。顶一顶。 --------------------编程问答-------------------- 建议查一下CSV文件格式的标准,这东西现在基本用的人不多,所以也就经常闹笑话,甚至个别人完全不懂什么是CSV就提供导出CSV功能,连CSV最基本的文本字段必须用双引号扩起来这种标准都不遵守 --------------------编程问答-------------------- 可能把F5、F7当成列名了。 --------------------编程问答-------------------- 直接用streamreader读就可以了,然后split,然后再去处理 --------------------编程问答-------------------- csv没有任何问题,它本来就是文本的。
Excel只懂得看第一行数据,这就是它的毛病。 --------------------编程问答--------------------
可以试一下Excel导出csv文件。它根本不加双引号。
csv规定只有内部含有特殊的字符(例如逗号)的时候才必须加双引号,否则就没有必要加。 --------------------编程问答--------------------
你说的没错,但Excel在处理有逗号的单元格时还是加了,而有的软件生成的根本不加,本来8个字段的表,由于个别行存在含有逗号的数据,导致变成10来个字段.
我见过有的软件用CSV传递数据,个别操作员为了个人目的故意在文本字段中加逗号的 --------------------编程问答-------------------- 扫前8行数据,来猜测数据类型。
你可以在第一行后面插一个文本类型的数据强制使其判断为文本。或者用csv的Schema.ini文件控制
[AP6806.csv]
ColNameHeader=True
CharacterSet=936
Format=CSVDelimited
Col1=违法时间 Date
Col2=凭证编号 Char Width 255
Col3=违法地点 Char Width 255
Col4=采集机关 Char Width 255
Col5=违法内容 Char Width 255
Col6=违反条款 Char Width 255
补充:.NET技术 , C#