Hallo zusammen,
ich habe ein Problem beim einlesen von CSV Dateien über OleDb.
Folgende Konfiguration verwende ich:
StringBuilder sbConnectionString = new StringBuilder(512);
sbConnectionString.Append("Provider= Microsoft.Jet.OLEDB.4.0;");
sbConnectionString.Append("Data Source=").Append(Path.GetDirectoryName(sFilename)).Append(";");
sbConnectionString.Append("Extended Properties=\"Text;");
sbConnectionString.Append("HDR=Yes;");
sbConnectionString.Append("FMT=Delimited\";");
// Sql-Statement erstellen...
string SqlStatement = "Select * from " + Path.GetFileName(sFilename);
// Datenzugriffsobjekte erzeugen...
OleDbDataAdapter adptSelect = new OleDbDataAdapter(SqlStatement, sbConnectionString.ToString());
// Daten auslesen und zurückliefern...
adptSelect.Fill(dataset);
Kommen jedoch Anführunfszeichen in der Datei vor sieht das ungefähr so aus:
field 1;field 2;field 3;field 4;field 5
field 1;field "2";field 3;field 4;field 5
field 1;field 2;field 3;field 4;field 5
+-------+-------+-------+-------+-------+
| field 1| field 2| field 3| field 4| field 5|
+-------+-------+-------+-------+-------+
| field 1| field
+-------+-------+-------+-------+-------+
| field 1| field2 | field 3| field 4| field 5|
+-------+-------+-------+-------+-------+
Ab der Zelle wo er dieses findet, beendet er diese einfach.
Gibt es eine Möglichkeit Anführungszeichen ganz normal mit einzulesen?
Hallo,
ich weiß jetzt auf Anhieb keine Lösung, aber vielleicht interessiert dich das hier:
A-Fast-CSV-Reader
Benchmarking it against both OLEDB and regex methods, it performs about 15 times faster, and yet its memory usage is very low.
EDIT:
Das ganze gibt's übrigens auch als NuGet Package: LumenWorksCsvReader
Ich verwende für CSV eigentlich immer aus dem .Net Framework den TextFieldParser.
Assembly: Microsoft.VisualBasic
Namespace: Microsoft.VisualBasic.FileIO
Vielleicht klappts mit dem.