In meiner C# -Anwendung verwende ich den Microsoft Jet OLEDB-Datenanbieter zum Lesen einer CSV-Datei. Die Verbindungszeichenfolge sieht wie folgt aus:Wie kann ich beim Lesen einer CSV-Datei mit einem DataReader und dem OLEDB Jet-Datenprovider Spaltendatentypen steuern?
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Data;Extended Properties="text;HDR=Yes;FMT=Delimited
ich ein ADO.NET-OleDbConnection öffnen Sie die Verbindungszeichenfolge und wählen Sie alle Zeilen aus der CSV mit dem Befehl Datei:
select * from Data.csv
Wenn ich öffne eine OleDbDataReader und untersuchen Sie die Datentypen der Spalten, die es zurückgibt, finde ich, dass etwas im Stapel versucht hat, die Datentypen basierend auf der ersten Zeile der Daten in der Datei zu erraten. Angenommen, die CSV-Datei enthält:
House,Street,Town
123,Fake Street,Springfield
12a,Evergreen Terrace,Springfield
die OleDbDataReader.GetDataTypeName Methode für das Haus Spalte aufrufen wird zeigen, dass die Spalte den Datentyp „DBTYPE_I4“ gegeben wurde, so dass alle von ihm gelesenen Werte interpretiert werden als ganze Zahlen. Mein Problem ist, dass House eine Zeichenfolge sein sollte - wenn ich versuche, den House-Wert aus der zweiten Zeile zu lesen, gibt der OleDbDataReader null zurück.
Wie kann ich entweder dem Jet-Datenbankanbieter oder dem OleDbDataReader mitteilen, dass eine Spalte als Zeichenfolgen anstelle von Zahlen interpretiert werden soll?
Dies würde den OleDbProvider insgesamt umgehen, was wahrscheinlich eine gute Sache ist. Die Werte, die von 'record [" FieldName "] zurückgegeben werden, sind alle Zeichenfolgen - mein Code müsste im Voraus wissen, welcher Datentyp von jeder Spalte erwartet wird, und die Zeichenfolgen durch 'System.Convert' ausführen. –