При чтении текстового файла с разделителями-запятыми в C # DataTable столбцы усекаются до 255 символов
Мы импортируем из CSV в SQL. Для этого мы читаем CSV-файл и записываем во временный .txt-файл, используя schema.ini. (Я пока не уверен, почему именно пишем в этот временный файл, но именно так работает код в настоящее время). Оттуда мы загружаем DataTable через OleDB, используя следующую строку подключения (для файлов ASCII).
<code>"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sPath + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\""; </code>
Проблема в том, что поля, содержащие более 255 символов, усекаются. Я читал в Интернете об этой проблеме, и кажется, что по умолчанию текстовые поля усекаются таким образом.
Я установил настройки своего реестраImportMixedTypes=Majority Type
а такжеTypeGuessRows=0
вHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
надеясь чтоmycolumns
больше не будет интерпретироваться как текст. После этого временный текстовый файл правильно записывается из CSV-файла, но когда я звонюdataAdapter.Fill
результирующий DataTable по-прежнему имеет усеченное значение.
Here is the column definition in question. CommaDelimited#txt Notes 2 false 234 true 130 0 0
Любая помощь будет оценена. В настоящее время я не заинтересован в использовании какого-либо стороннего кода для решения этой проблемы, должен быть способ использования встроенных инструментов.
Вот определение таблицы:
<code><Columns> <TABLE_NAME>CommaDelimited#txt</TABLE_NAME> <COLUMN_NAME>Notes</COLUMN_NAME> <ORDINAL_POSITION>2</ORDINAL_POSITION> <COLUMN_HASDEFAULT>false</COLUMN_HASDEFAULT> <COLUMN_FLAGS>234</COLUMN_FLAGS> <IS_NULLABLE>true</IS_NULLABLE> <DATA_TYPE>130</DATA_TYPE> <CHARACTER_MAXIMUM_LENGTH>0</CHARACTER_MAXIMUM_LENGTH> <CHARACTER_OCTET_LENGTH>0</CHARACTER_OCTET_LENGTH> </Columns> </code>
Спасибо,
Greg
Я попытался отредактировать schema.ini, указав ширину текста, но это не помогло (раньше было установлено значение memo)
[CommaDelimited.txt] Формат = CSVDelimited DecimalSymbol =. Col1 = Ширина текста заметки 5000