csv列包含mix数据类型无法使用oledb提供程序读取所有单元格数据

时间:2010-07-22 06:41:19

标签: c# sql-server vb.net vba asp-classic

我的csv包含mix数据类型f.ex.在单元格E8中,数据格式为日期,此E列中的其他数据为字符串。 我在经典的asp,VB Script和后端SQl服务器中使用这个连接字符串

ChekCnn.Open“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”& Path1& “;扩展属性=”“文本; HDR = YES; IMEX = 1; FMT =定界”“” 设置rs1 = ChekCnn.Execute(“SELECT * FROM myCSV.csv”)

问题在于,如果在单元格E8处有日期,那么包含字符串数据的其他单元格将不会读取并显示为空白,如果在单元格E8处为空白,则它将读取E列的每个单元格数据。

2 个答案:

答案 0 :(得分:3)

您可以使用“schema.ini”来控制用于列的数据类型,以便将列设置为文本并转换每行数据。

“schema.ini”的MSDN参考:http://msdn.microsoft.com/en-us/library/ms709353.aspx

“schema.ini”必须与* .csv文件位于同一文件夹中。

实施例

dim ChekCnn : set ChekCnn=CreateObject ("ADODB.Connection")
dim rs1  : set rs1 = CreateObject ("ADODB.Recordset")
ChekCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\temp\" & ";Extended Properties=""text;HDR=YES;IMEX=1;FMT=Delimited""" 
Set rs1 = ChekCnn.Execute("SELECT * FROM test.csv")

Do until rs1.eof
    wscript.echo rs1("dataname") & "=>" & rs1("data")
rs1.MoveNext
loop

rs1.close

test.csv

dataname,data
test1,100
test2,100
test3,100
test4,nothing
test5,100
test6,100
test7,100

SCHEMA.INI

[test.csv]
Format=CSVDelimited
DecimalSymbol=.
Col1=dataname Text
Col2=data Text

输出不带 schema.ini

test1=>100
test2=>100
test3=>100
test4=>
test5=>100
test6=>100
test7=>100

使用 schema.ini输出

test1=>100
test2=>100
test3=>100
test4=>nothing
test5=>100
test6=>100
test7=>100

答案 1 :(得分:0)

如果列名中有空格,则可以将Schema.ini文件写为
Col1 =“系统名称”文本
Col2 =“系统代码”文本