Der (Microsoft) Office Doktor und Softwarearchitekt

Hinweise, Tipps und Tricks für Microsoft Office VBA Entwickler

DataAdapter.Fill() versus DataTable.Load()

Vielleicht haben Sie sich auch schon gefragt wie man seine Daten wohl am schnellsten in eine DataTable lädt. Über DataAdapter.Fill() oder über DataTable.Load()?

Beide Methoden arbeiten im Hintergrund mit einem DataReader. “Im Vergleich zum DataAdapter ist die DataTable aber doch viel schlanker und beherbergt weniger Funktionalität und Code” … oder? Die meisten tippen jedenfalls auf DataTable.Load().

Wir haben es einfach probiert. Mit einer Tabelle, die 200.000 Datensätze enthält und keinen Index besitzt, haben wir beide Methoden getestet und jeweils die Zeit gestoppt. Mehrmals hintereinander. Und was kam dabei heraus?

Sowohl DataAdapter.Fill() als auch DataTable.Load() brauchten für das Einlesen der Sätze 25 Sekunden … nicht mehr und nicht weniger.

Wie langweilig solche Tests doch sein können!

ADO.NET Fehlermeldung mit MS Access

Sie benutzen auch die Microsoft Access Nordwind-Datenbank, um ihren .NET-Code zu testen? Dann wird Ihnen folgender Fehler vielleicht bekannt vorkommen:

Bei dem Versuch, eine Tabelle der Nordwind-Datenbank mit der Update-Methode eines DataAdapters zu aktualisieren, erhalten Sie immer wieder die Fehlermeldung

“Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben.”

Bei der Erstellung des DataAdapters für die Kunden-Tabelle haben Sie beispielsweise geschrieben:

OleDbDataAdapter da = new OleDbDataAdapter(“SELECT * FROM Kunden”, con);

Beim Speichern erhalten Sie dann aber besagte Fehlermeldung. Was geht hier vor?

Viele Tabellen der Nordwind-Datenbank enthalten Feldnamen in denen Sonderzeichen vorkommen, wie z.B. in der Kundentabelle das Feld “Kunden-Code”. Der OleDbProvider von .NET schreibt solche Felder im Hintergrund mit eckigen Klammern als “[Kunden-Code]” in seine SQL-Statements, wie man es in Microsoft Access und Microsoft SQL-Server ja auch gewohnt ist.

Dumm ist nur, dass der CommandBuilder in ADO.NET diese Klammern nicht versteht und einfach als alphanumerisches Zeichen wertet, so dass er bei “[Kunden-Code]” immer noch über das Sonderzeichen (-) stolpert. Was ist nun die Lösung des Problems?

Teilen Sie dem CommandBuilder nach dessen Erzeugung einfach mit, dass die Klammern “[" und "]” nicht als normale Zeichen, sondern als Feldbegrenzungszeichen gewertet werden sollen. Das sieht dann wie folgt aus:

OleDbDataAdapter da = new OleDbDataAdapter(“SELECT * FROM Kunden”, con);
OleDbCommandBuilder cmb = new OleDbCommandBuilder(da);
cmb.QuotePrefix = “[";
cmb.QuoteSuffix = "]“;
da.Update(this.AppDataSet.Kunden);

Und schon steht einer Aktualisierung der Daten nichts mehr im Wege.
So einfach kann es sein!

Copyright © 2010 by: Der (Microsoft) Office Doktor und Softwarearchitekt • Design by: BlogPimp / Appelt Mediendesign • Lizenz: Creative Commons BY-NC-SA.


Michael Scholz

Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Microsoft Office Makros
Microsoft Office AddIns
Microsoft Office VBA
Microsoft Office Programmierung
Microsoft Office Entwicklung
Microsoft Word Excel Powerpoint Access
Microsoft Word
Microsoft Excel
Microsoft Powerpoint
Microsoft Access
Access Programmierung
Word Programmierung
Excel Programmierung 
Powerpoint Programmierung

Office Doktor Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Office Doktor Microsoft Office Makros
Office Doktor Microsoft Office AddIns
Office Doktor Microsoft Office VBA
Office Doktor Microsoft Office Programmierung
Office Doktor Microsoft Office Entwicklung
Office Doktor Microsoft Word Excel Powerpoint Access
Office Doktor Microsoft Word
Office Doktor Microsoft Excel
Office Doktor Microsoft Powerpoint
Office Doktor Microsoft Access
Office Doktor Access Programmierung
Office Doktor Word Programmierung
Office Doktor Excel Programmierung 
Office Doktor Powerpoint Programmierung

Softwarearchitekt Microsoft Office Makros AddIns VBA Programmierung Entwicklung
Softwarearchitekt Microsoft Office Makros
Softwarearchitekt Microsoft Office AddIns
Softwarearchitekt Microsoft Office VBA
Softwarearchitekt Microsoft Office Programmierung
Softwarearchitekt Microsoft Office Entwicklung
Softwarearchitekt Microsoft Word Excel Powerpoint Access
Softwarearchitekt Microsoft Word
Softwarearchitekt Microsoft Excel
Softwarearchitekt Microsoft Powerpoint
Softwarearchitekt Microsoft Access
Softwarearchitekt Access Programmierung
Softwarearchitekt Word Programmierung
Softwarearchitekt Excel Programmierung 
Softwarearchitekt Powerpoint Programmierung