DataSet
Eintrag zuletzt aktualisiert am: 20.01.2024
Ein DataSet ist das zentrale Element der
Datenbankzugriffschnittstelle
ADO.NET und repräsentiert eine Menge von Tabellen (Relationen) im Hauptspeicher. Ein DataSet kann daher auch als eine hierarchische
In-Memory-Database bezeichnet werden.
Hinweis: In Microsoft
SQL Server Reporting Services (
SSRS) wird der Begriff "DataSet" allgemein für eine Datenmenge verwendet.
SSRS-Datasets basieren nicht auf
ADO.NET Datasets.
Die Klasse
System.Data.DataSet [
https://learn.microsoft.com/de-de/dotnet/api/system.data.dataset] gibt es seit dem
.NET Framework Version 1.0 aus dem Jahr 2001. Sie war damals eine Revolution für den Datenzugriff. In den ersten Versionen von .NET Core war die Klasse DataSet nicht enthalten. Im Zuge von der Angleichung von
.NET Framework und .NET Core kam sie jedoch in den
.NET Standard 2.0 und ist dabei seit
.NET Core 2.0 in allen modernen .NET-Versionen bis einschließlich der aktuellen Version 8.0 aus dem November 2023 enthalten.
Aufbau eines DataSets
Das DataSet ist im Standard ein untypisierter Datencontainer, der beliebigen
Datenbanktabellen, Views, Resultsets von SQL-Abfragen oder manuell dort abgelegte Daten speichern kann. Ein DataSet besteht aus einer oder mehreren Tabellen (
DataTable). Die Anzahl der Spalten (DataColumn) und Zeilen ist nicht begrenzt. Jede Spalte besitzt einen Datentyp, in dem man die wichtigsten elementaren .NET-Datentypen (siehe [
https://learn.microsoft.com/de-de/dotnet/api/system.data.datacolumn.datatype]) verwenden kann: Boolean, Byte, Char, DateTime, Decimal, Double, Guid, Int16, Int32,
Int64, SByte, Single, String, TimeSpan, UInt16, UInt32 und U
Int64. Auch Byte-Arrays sind möglich.
Es gibt auch eine typisierte Variante des DataSets ("Typed DataSet"), die auf Codegenerierung zur Entwicklungszeit basiert.
DataSets befüllen
Es gibt drei Möglichkeiten, ein DataSet zu füllen:
1. Die Tabelle können mit Hilfe von
Managed Providern aus unterschiedlichen
Datenbankquellen geladen werden. Um Daten aus einem
Managed Provider in ein DataSet zu tranferieren, wird ein
DataAdapter benötigt.
2. Auch das Laden von
XML-Daten in ein DataSet ist möglich.
3. Zum Dritten kann ein DataSet auch per Programmcode gefüllt werden.
DataSet vs. Recordset
Dieses Konzept existierte im Vorgänger
ActiveX Data Objects (ADO) noch nicht. Dort gab es nur RecordSet-
Objekte, die jeweils genau eine Tabelle (im relationalen
Datenbankmodell auch Relation genannt – nicht zu verwechseln mit dem englischen Begriff relation, der Verknüpfung bedeutet) repräsentiert haben. Ein DataSet ist aber nicht die Zusammenfassung mehrerer RecordSet-
Objekte. Die einzelnen Tabellen werden nicht mehr durch RecordSet-, sondern durch
DataTable-
Objekte repräsentiert.
Weitere Möglichkeiten im DataSet
Zwischen
DataTable-
Objekten in einem DataSet können Verknüpfungen definiert werden. Die Verknüpfungen werden dann nicht wie Joins im relationalen
Datenbankmodell als Tabellen, sondern durch hierarchische Eltern-Kind-Beziehungen dargestellt.
Ein DataSet ist disconnected, d.h. die Daten aus der Datenquelle werden komplett in das DataSet eingelesen, im Speicher gehalten und erst zu einem definierbaren Zeitpunkt werden die kompletten Änderungen zurück an die Datenquelle gegeben (Batch Update).