#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. изменений вообще не было, они по-прежнему помещались в первую запись в качестве заголовка