schema.ini для определения csv-файла

#c# #.net #sql #sql-server #xml

#c# #.net #sql #sql-сервер #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 SettingsAdministratorMy Documents"   _
        "Visual Studio 2008Projectscsv_readercsv_readerbinDebug"
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. Вы знаете, как отформатировать свой вопрос, чтобы код и содержимое файла отображались лучше.

2. И как получилось, что этот VB.NET скопировано с какого-либо другого веб-сайта (форумы msdn, опубликовано 3,5 года назад!)? social.msdn.microsoft.com/forums/en-US/vbgeneral/thread /…

Ответ №1:

Измените его на HDR=No .

HDR обозначает заголовок столбца.

Комментарии:

1. на самом деле, извините, чувак, это не сработало — никаких изменений вообще после изменения этого

2. изменений вообще не было, они по-прежнему помещались в первую запись в качестве заголовка