在使用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正常。)希望遇到过这类问题的朋友们分享一下解决方案。有兴趣的朋友们也可以试试。谢谢……。

解决方案 »

  1.   


    此贴注定要沉?
    Oh No.................
      

  2.   

    建议查一下CSV文件格式的标准,这东西现在基本用的人不多,所以也就经常闹笑话,甚至个别人完全不懂什么是CSV就提供导出CSV功能,连CSV最基本的文本字段必须用双引号扩起来这种标准都不遵守
      

  3.   

    直接用streamreader读就可以了,然后split,然后再去处理
      

  4.   

    csv没有任何问题,它本来就是文本的。Excel只懂得看第一行数据,这就是它的毛病。
      

  5.   


    可以试一下Excel导出csv文件。它根本不加双引号。csv规定只有内部含有特殊的字符(例如逗号)的时候才必须加双引号,否则就没有必要加。
      

  6.   

    你说的没错,但Excel在处理有逗号的单元格时还是加了,而有的软件生成的根本不加,本来8个字段的表,由于个别行存在含有逗号的数据,导致变成10来个字段.我见过有的软件用CSV传递数据,个别操作员为了个人目的故意在文本字段中加逗号的
      

  7.   

    扫前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