Laden...

OleDb - Textfile einlesen

7 Antworten
2,171 Aufrufe
Letzter Beitrag: vor 14 Jahren
OleDb - Textfile einlesen

Hallo,

das Thema wurde schon X-Mal abgehandelt. Dennoch: ich finde meinen Fehler nicht.
Was ist bitte am folgenden Code falsch?:

DataTable dt = new DataTable();

OleDbConnection oledbconnection = new OleDbConnection("Provider= Microsoft.Jet.OLEDB.4.0;" +
 "Data Source = C:\\testverzeichnis\\;  "   +
 " Extended Properties=\"text;HDR=Yes;FMT=Delimited(;)\";");
           
OleDbCommand cmd = new OleDbCommand("select * from c:test.txt, oledbconnection");
        
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
oledbconnection.Open();
      
da.Fill(dt);

als Fehler kommt: "Fill: SelectCommand.Connection-Eigenschaft wurde nicht initialisiert.

Die Test.txt hat folgenden Inhalt:
1;2;3;
a;b;c;
A;B;C;

Danke für eine Antwort
Walter

Also, das erste was auffällt, du benutzt die connection, die du erstellt hast, gar nicht. Ob das sonst so funktionieren würde, kann ich nicht sagen. Habs nie probiert, halts auch nicht für die beste Lösung.

Hallo,

nicht:

new OleDbCommand("select * from c:test.txt, oledbconnection");

sondern:

new OleDbCommand("select * from c:test.txt", oledbconnection);

Was soll "c:test.txt" bedeuten?

Das mit dem Trennzeichen funktioniert so auch nicht: FMT=Delimited(;). Laut ConnectionStrings ist das Trennzeichen in der Registry eingetragen.

Das hier:

oledbconnection.Open();

ganz weglassen.

Der Übersichtlichkeit halber würde ich noch den OleDbConnectionStringBuilder verwenden. Also mal komplett:

            DataTable dt = new DataTable();

            OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
            builder["Provider"] = "Microsoft.Jet.OLEDB.4.0";
            builder["Data Source"] = @"c:\testverzeichnis\";
            builder["Extended Properties"] = "text;HDR=Yes;FMT=Delimited";

            OleDbConnection oledbconnection = new OleDbConnection(builder.ConnectionString);

            OleDbCommand cmd = new OleDbCommand("select * from test.txt", oledbconnection);

            OleDbDataAdapter da = new OleDbDataAdapter(cmd);

            da.Fill(dt);

Vielleicht geht das Ganze ja auch einfacher "zu Fuß", also mit den Klassen aus System.IO.

Grüße, Koller.

Wie wäre es als Alternative das Textfile über FileStream & StreamReader auszulesen?

Hallo!

Bei Textdateien über OleDB sollte man eine Schema.ini anlegen, in welcher die Parameter (z.B. für das Trennzeichen) eingetragen sind. Das Format ist irgendwo in der MSDN beschrieben.

Nobody is perfect. I'm sad, i'm not nobody 🙁

OleDbCommand cmd = new OleDbCommand("select * from c:test.txt, oledbconnection");

Ist das wirklich die Zeile?
Schau mal wo da die Anführungszeichen sind.

Danke für die Antworten. Ich kann i.d.R. immer nur am Wochenende weiterschreiben, hoffe aber, dass es wie beantwortet, klappt. Nomals: Danke

Walter