Forum: PC-Programmierung C# Oledb excel conneczion


von Martin (Gast)


Lesenswert?

Hallo zusammen.

Ich habe ein tool, welches Excel-Daten ausliest und diese zur weiteren 
Verarbeitung anbietet. Gelöst über folgenden Code (Ausschnitt):
1
// create new OLEdb connection
2
                OleDbConnection oledbCon = OpenOledbConnection(OledbProvider, filePath);
3
                // get all tables
4
                DataTable sheets = oledbCon.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });          
5
                // add all sheets to DataTable
6
                foreach (DataRow sheet in sheets.Rows)
7
                {
8
                    string tableName = sheet["Table_Name"].ToString();
9
                    string sql = "SELECT * FROM [" + tableName + "]";
10
                    OleDbDataAdapter adap = new OleDbDataAdapter(sql, oledbCon);
11
                dap.Fill(ds, tableName);
12
                // close connection
13
                oledbCon.Close();
"ds" ist ein DataSet, der connection string sieht wie folgt aus:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\some.xls;Extended 
Properties="Excel 8.0;HDR=No;IMEX=1"

Problem: das ganze funktioniert NUR so lange die Anzahl der Spalten 
nicht zu groß ist. Jetzt hatte ich den Fall, dass eine Excel-Datei ein 
"korruptes" sheet hatte ( in der Spalte 200... irgendwas stehen, was 
aber keine Nutzerdaten waren ). Dies führt natürlich zu einer Exception 
"zu viele Felder definiert".

Frage:
Kann man die Anzahl der Spalten beim Lesen direkt begrenzen? Ich würde 
am liebsten nämlich trotzdem lesen können und dem User an anderer Stelle 
mitteilen, dass womöglich nicht alle Splten enthalten sind, anstatt dass 
das sheet komplett verworfen wird.

von Mensch (Gast)


Lesenswert?

Martin schrieb:
> foreach (DataRow sheet in sheets.Rows)

Vielleicht durch eine for-Schleife ersetzen und diese bis zu einer 
bestimmten Anzahl von Zeilen laufen lassen?
Kenne mich damit selber nicht sehr gut aus, aber das wäre mir auf den 
ersten Blick aufgefallen.

von Andreas K. (scavanger)


Lesenswert?

Martin schrieb:
> Kann man die Anzahl der Spalten beim Lesen direkt begrenzen? Ich würde
> am liebsten nämlich trotzdem lesen können und dem User an anderer Stelle
> mitteilen, dass womöglich nicht alle Splten enthalten sind, anstatt dass
> das sheet komplett verworfen wird.

Wenn korrekte Daten vorliegen läuft alles, wenn ich es richtig 
verstanden habe?

Mach ein vernünftiges Exception-Handling (try ... catch), behandle die 
Fehler entsprechend und alles wird gut.

Das mit dem begrenzen ist keine gute Idee. Welche Grenze willst du 
ziehen? Die korrupten Daten können ja auch mal in Spalte 1 stehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.