用Schema来决定CSV文件的字段类型

  

在说这一问题之前,先看一下以下的CSV文件内容:

001,a,1,
002,b,2,
003,c,3,
004,d,4,

这是一个很简单的文件,前两个字段是字符串,最后一个是数字
我们用ADO访问时,连接如下:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\;Extended Properties="text;HDR=No;FMT=Delimited";Persist Security Info=False
然后用一个sql语句,select * from Demo#csv 来获取所有的数据
这样一来,你就会发现问题,因为第一个字段,ADO读到的是数字

如图所示: 

那么我要让第一列显示出"001"来,要怎么办呢?
解决的方法其实很简单,就是为CSV文件写一个Schema.ini

内容如下:
[Demo.csv]
Format=Delimited(,)
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI
Col1=F1 Char Width 3
Col2=F2 Char Width 10
Col3=F3 Integer

把这个文件放到csv所在的同一目录内,然后再次打开数据集。 

可以看到,F1处的数据已经是字符串了。Schema.ini的用法可见一斑。
对于多个csv文件,也可以只用一个Schema.ini来对它们作出规定。如下:
[Demo.csv]
Format=Delimited(,)
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI
Col1=F1 Char Width 3
Col2=F2 Char Width 10
Col3=F3 Integer

[Demo2.csv]
Format=Delimited(,)
ColNameHeader=False
MaxScanRows=0
CharacterSet=ANSI
Col1=F1 Char Width 5
Col2=F2 Char Width 5
Col3=F3 Char Width 5
Col4=F4 Char Width 5
Col5=F5 Char Width 5
Col6=F6 Char Width 5

其实就是将两个csv的定义写在了一起,用ini的Section来区分文件。
实现的效果如下:

你可能感兴趣的:(.Net,问题处理和解决)