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
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Jet-Datenbank-engine schneidet memo-Felder, wenn Sie Fragen zur Verarbeitung der Daten basiert auf dem memo: Aggregation, de-Duplizierung, Formatierung, und so weiter.
http://allenbrowne.com/ser-63.html
InformationsquelleAutor Robert Harvey
Hier ist eine einfache Klasse zum Lesen einer Datei mit Trennzeichen und die Rückgabe einer DataTable (alle Streicher), die nicht abschneiden strings. Es hat eine überladene Methode zum angeben von Spaltennamen, wenn Sie sich nicht in der Datei. Vielleicht können Sie es nutzen?
Importierte Namespaces
Code
Erforderlichen Namespaces
Hier ist ein Beispiel für das aufrufen und das hochladen auf einer SQL-Datenbank:
InformationsquelleAutor
Können Sie dies korrigieren, indem Sie die korrekte Angabe Ihrer schema.ini - Datei. Ich glaube, die beiden Optionen sind entweder die Spalte eines Memo-Typ, oder legen Sie die Breite > 255.
InformationsquelleAutor Reed Copsey
Meine Neigung wäre zu erstellen der DataTable direkt beim Einlesen der CSV-Datei, anstatt durch den zusätzlichen Schritt des Schreibens der Daten zu anderen text-Datei, nur Lesen es zurück in den Speicher ein zweites mal.
Für, dass Materie, wie sind Sie letztendlich die Daten aus der Datentabelle in die SQL-Datenbank? Wenn Sie nur die Schleife durch die DataTable und dabei eine Reihe von INSERT-Anweisungen, warum nicht überspringen Sie zwei Zwischenhändler und rufen Sie die gleiche INSERT-Anweisungen, während Sie zunächst das Lesen der CSV-Datei?
InformationsquelleAutor Joel Mueller
Ich denke, der beste Weg, es zu tun ist durch die Verwendung von CSVReader im folgenden blog:
http://ronaldlemmen.blogspot.com/2008/03/stopping-and-continuing-save-event.html
InformationsquelleAutor Ayman
Ich Stand vor einem ähnlichen Problem mit meinem .Net-code, und ich war in der Lage, damit es funktioniert nur durch ändern der Registry-Einstellungen zu Majortity Art, wie oben im original-post. Was ich anders gemacht habe in meinem Fall ist:
Da wir versuchen, Sie zu importieren aus einer CSV-und nicht Excel. Also ich hatte zum ändern der Einstellungen für Text in der Registrierung (Nicht Excel).
Versuchen, es zu tun und ich denke, es sollte funktionieren
InformationsquelleAutor Sunil R