schema.ini定义csv

时间:2011-06-02 02:27:27

标签: c# .net sql sql-server xml

显然我在尝试使用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?

1 个答案:

答案 0 :(得分:1)

将其更改为HDR=No

HDR代表列标题