显然我在尝试使用schema.ini来定义csv时遗漏了一些东西。我的代码似乎忽略了schema.ini。
schema.ini与csv放在同一个子目录中,如下所示:
[excel.csv]
Format = CSVDelimited
Col1=TSP text width 17
Col2=Svc text width 17
Col3=DTM text width 3
由'标题'行和'数据'行组成的csv数据如下:
"TSP","Svc","DTM"
"006958581","006927792","rdt"
我试图使用的代码如下:
Imports System.Data.OleDb
Module Module1
Sub Main()
Dim Csv_in_name As String = "excel.csv"
Dim Csv_in_path As String =
"C:\Documents and Settings\Administrator\My Documents" + _
"\Visual Studio 2008\Projects\csv_reader\csv_reader\bin\Debug"
Dim cn As New OleDbConnection
Dim adapter As New OleDbDataAdapter
Dim cmd As New OleDbCommand
Dim dtset As New DataSet
Dim dt As New DataTable
Dim cnstr As String =
"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data source = " + _
Csv_in_path + "\; Extended Properties=""Text;HDR=No;FMT=Delimited"""
cn.ConnectionString = cnstr
cn.Open()
cmd.Connection = cn
cmd.CommandText = "Select * from " + Csv_in_name
adapter.SelectCommand = cmd
adapter.Fill(dtset, "MyTable")
dt = dtset.Tables("MyTable")
cn.Close()
dt.WriteXml(Csv_in_path + "\data.xml")
End Sub
End Module
当连接字符串中的HDR=No
时,代码似乎忽略了schema.ini,如字段分隔符名称所示。这两行都被解释为数据,XML数据如下:
<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
<MyTable>
<F1>TSP</F1>
<F2>Svc</F2>
<F3>DTM</F3>
</MyTable>
<MyTable>
<F1>006958581</F1>
<F2>006927792</F2>
<F3>rdt</F3>
</MyTable>
</NewDataSet>
当HDR=Yes
时,schema.ini将按预期被忽略,并且字段通过csv中的第一行正确标记。 XML数据如下:
<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
<MyTable>
<TSP>006958581</TSP>
<Svc>006927792</Svc>
<DTM>rdt</DTM>
</MyTable>
</NewDataSet>
由于schema.ini存在于两个实例中,因此我希望第一个实例中有2行数据,但是与第二个实例中的字段分隔符相同,因为这些是schema.ini中的定义。为什么要忽略schema.ini?
答案 0 :(得分:1)
将其更改为HDR=No
。
HDR
代表列标题。