Lesen Komma-getrennter Text-Datei in C# DataTable-Spalten bekommen, auf 255 Zeichen abgeschnitten

Wir importieren aus CSV to SQL. So zu tun, Lesen wir die CSV-Datei und schreiben in eine temporäre .txt-Datei mit einem schema.ini. (Ich bin mir noch nicht sicher genau, warum sind Schriftform, um diese temporäre Datei, aber das ist, wie der code funktioniert derzeit). Von dort aus sind wir laden Sie ein DataTable mittels OleDB mit Hilfe der folgenden Verbindungs-Zeichenfolge (ASCII-Dateien).

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sPath + ";Extended Properties=\"text;HDR=Yes;FMT=Delimited\"";

Das problem, das wir haben ist, dass die Felder mit mehr als 255 Zeichen gekürzt. Ich habe online gelesen über dieses problem, und es scheint, dass durch die Standard -, text-Felder abgeschnitten, so.

Ich meine registry-Einstellungen ImportMixedTypes=Majority Type und TypeGuessRows=0 im HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
in der Hoffnung , dass mycolumns wird nicht mehr als text interpretiert. Danach kann die temporäre txt-Datei geschrieben wird korrekt aus der CSV-Datei, aber wenn ich Anrufe dataAdapter.Fill die resultierende DataTable hat noch eine abgeschnittene Wert.

Hier ist die definition für die Spalte in Frage.

Komma-getrennte geschrieben#txt-Notizen 2 false 234 true 130 0 0

Jede Hilfe würde geschätzt werden. Zu dieser Zeit, ich bin nicht daran interessiert, mit jedem 3d-party-code, um dieses problem zu lösen, muss es eine Möglichkeit mithilfe von integrierten tools.

Hier ist die definition der Tabelle:

<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>

Dank,

Greg


Ich habe versucht, die Bearbeitung der schema.ini-Angabe text mit einer Breite, und das hat nicht geholfen (es war im memo vor)

[CommaDelimited.txt]
Format=CSVDelimited
DecimalSymbol=.
Col1=Text Der Notizen Breite 5000

Eine weitere Sache... hier ist die definition für die Spalte <Spalten> <TABLE_NAME>Komma-getrennte geschrieben#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> </Spalten>
Bearbeiten können Sie die original-post auch.
Greg. Sie sind berechtigt, zu Bearbeiten deiner ursprünglichen Frage. Es wäre besser, integrieren Sie Ihren Kommentar in der ursprünglichen Frage, damit es nicht verloren geht und übersehen wird, hier unten.
"Ich bin nicht daran interessiert, mit jedem 3d-party-code, um dieses problem zu lösen" - schade, CsvReader (gemischt mit SqlBulkCopy) wäre ideal. stackoverflow.com/questions/662179#662198
Danke Marc, ich werde mal sehen, aber es würde eine Menge Bürokratie zu integrieren, eine 3d-party-dll.

InformationsquelleAutor Greg Bailey | 2009-06-26

Schreibe einen Kommentar