34 ADO.NET – Daten im lokalen Speicher
34.1 Allgemeines
Wäre man gezwungen, eine Rangfolge der ADO.NET-Typen nach ihrer Wichtigkeit aufzustellen, würde DataSet zweifelsfrei an erster Position stehen. Diese Klasse bildet den Kern von ADO.NET, um den herum sich fast alles andere rankt.
Ein DataSet ist in erster Linie ein Datencontainer. Organisiert und verwaltet werden die Daten in Form von Tabellen. Wenn Sie sich darunter Tabellen ähnlich denen von MS Excel vorstellen, liegen Sie gar nicht so ganz falsch. Ob es sich um eine oder auch mehrere Tabellen handelt, hängt von der zugrunde liegenden Abfrage ab, die durch das SqlCommand-Objekt beschrieben wird. Enthält das DataSet mehrere Tabellen, können zwischen den Tabellen Beziehungen eingerichtet werden – ganz so wie in der Originaldatenbank.
In Kapitel 32 haben Sie den Typ SqlDataReader kennengelernt. Mit einem Objekt dieses Typs können Sie Daten basierend auf einer Abfrage abrufen. Ein SqlDataReader ist aber nicht so weit ausgebildet, die üblichen Aufgaben einer Datenbankanwendung zu erfüllen. Wie Sie wissen, können Sie nur vorwärts navigieren, zudem sind die Daten schreibgeschützt. Damit ist der SqlDataReader in seiner Funktionalität sehr eingeschränkt. Vorteil des SqlDataReaders ist hingegen seine enorme Effizienz, denn er ist auf Performance ausgelegt. Ein DataSet hingegen ist im Vergleich dazu deutlich leistungsfähiger – aber auch hinsichtlich der Performance schlechter.
Die Daten im DataSet stehen in keinem Kontakt zur Datenbank. Nachdem das DataSet über das SqlDataAdapter-Objekt gefüllt worden ist, gibt es keine Verbindung zwischen DataSet und Datenbank mehr. Nimmt ein Anwender Änderungen an den Daten vor, schreiben sich diese nicht sofort in die Originaldatenbank zurück, sondern werden vielmehr zunächst im DataSet gespeichert. Zum Zurückschreiben der geänderten Daten muss ein Anstoß erfolgen. Häufig kann man sich dazu wieder des SqlDataAdapters bedienen, der die notwendige Aktualisierungslogik bereitstellt. Sollten Sie Erfahrungen mit Datenbanken haben, werden Sie jetzt sicherlich sofort einwenden, dass damit Konfliktsituationen vorprogrammiert sind, wenn ein zweiter Anwender zwischenzeitlich Änderungen am gleichen Datensatz vorgenommen hat. Der Einwand ist korrekt, andererseits gibt uns ADO.NET alle Mittel in die Hand, eine benutzerdefinierte Konfliktsteuerung und Konfliktanalyse zu codieren. Darüber hinaus können Sie eine Konfliktlösung realisieren, ganz so, wie Sie es sich vorstellen. Mit der Aktualisierung der Originaldatenbank werden wir uns in diesem Kapitel jedoch noch nicht beschäftigen.
Damit sind noch nicht alle Fähigkeiten des DataSets erwähnt. In einem DataSet lässt sich die Ansicht der Abfrageergebnisse ändern. Sie können die Daten basierend auf einer oder mehreren Spalten sortieren. Setzen Sie im DataSet einen Filter, sehen Sie nur Daten, die bestimmte Kriterien erfüllen. Zudem ist die Zusammenarbeit eines DataSets mit XML ausgezeichnet. Der Inhalt eines DataSets kann als XML-Dokument in einer Datei gespeichert und der Inhalt einer XML-Datei in ein DataSet eingelesen werden. Darüber hinaus lassen sich die Schemainformationen eines DataSets in einer XML-Schemadatei speichern.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.