Мы импортируем из CSV в SQL. Для этого мы читаем CSV-файл и записываем во временный .txt-файл, используя schema.ini. (Я пока не уверен, почему именно пишем в этот временный файл, но именно так работает код). Оттуда мы загружаем DataTable через OleDB, используя следующую строку подключения (для файлов ASCII).
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sPath + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\"";
Проблема, с которой мы сталкиваемся, состоит в том, что поля, содержащие более 255 символов, усекаются. Я читал в Интернете об этой проблеме, и кажется, что по умолчанию текстовые поля усекаются таким образом.
Я установил параметры реестра ImportMixedTypes=Majority Type
и TypeGuessRows=0
в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
в надежде, что mycolumns
больше не будет интерпретироваться как текст. После этого временный текстовый файл корректно записывается из CSV-файла, но когда я вызываю dataAdapter.Fill
, результирующий DataTable все еще имеет усеченное значение.
Вот определение столбца, о котором идет речь.
CommaDelimited # txt Примечания 2 false 234 true 130 0 0
Любая помощь будет оценена. В настоящее время я не заинтересован в использовании какого-либо стороннего кода для решения этой проблемы, должен быть способ использования встроенных инструментов.
Вот определение таблицы:
<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>
Спасибо
Грег
Я попытался отредактировать schema.ini, указав ширину текста, но это не помогло (раньше было установлено значение memo)
[CommaDelimited.txt]
Формат = CSVDelimited
DecimalSymbol =.
Col1 = ширина текста заметки 5000