Typisierte und nicht typisierte Datasets im .NET Framework

Hinweis

Datasets und verwandte Klassen sind ältere .NET-Technologien aus den frühen 2000er Jahren, die es Anwendungen ermöglichen, mit Daten im Arbeitsspeicher zu arbeiten, während die Anwendungen von der Datenbank getrennt sind. Sie sind besonders nützlich für Anwendungen, die es Benutzern ermöglichen, Daten zu ändern und die Änderungen wieder in der Datenbank zu speichern. Obwohl sich Datasets als sehr erfolgreiche Technologie erwiesen haben, empfehlen wir, dass neue .NET-Anwendungen Entity Framework Core verwenden. Entity Framework bietet eine natürlichere Möglichkeit, mit tabellarischen Daten als Objektmodelle zu arbeiten, und verfügt über eine einfachere Programmierschnittstelle.

Ein typisiertes Dataset ist ein Dataset, das zuerst von der Basisklasse DataSet abgeleitet wird und dann Informationen aus dem DataSet-Designerverwendet, die in einer XSD-Datei gespeichert sind, um eine neue stark typisierte Datasetklasse zu generieren. Die Informationen aus dem Schema (Tabellen, Spalten usw.) werden generiert und in dieser neuen Datasetklasse als Satz von erstklassigen Objekten und Eigenschaften compiliert. Da ein typisiertes Dataset von der Basisklasse DataSet erbt, geht die typisierte Klasse davon aus, dass alle Funktionen der DataSet-Klasse übernommen und mit Methoden verwendet werden können, die eine Instanz einer DataSet-Klasse als Parameter verwenden.

Ein nicht typisiertes Dataset weist dagegen kein entsprechendes integriertes Schema auf. Wie in einem typisierten Dataset enthält ein nicht typisiertes Dataset Tabellen, Spalten usw., aber diese werden nur als Sammlungen verfügbar gemacht. (Nachdem Sie jedoch die Tabellen und anderen Datenelemente in einem nicht typisierten Dataset manuell erstellt haben, können Sie die Struktur des Datasets mithilfe der WriteXmlSchema-Methode des Datasets als Schema exportieren).

Vergleichen des Datenzugriffs in typisierten und nicht typisierten Datasets

Die Klasse für ein typisiertes Dataset weist ein Objektmodell auf, in dem die Eigenschaften die tatsächlichen Namen der Tabellen und Spalten übernehmen. Wenn Sie z. B. mit einem typisierten Dataset arbeiten, können Sie mithilfe von Code wie dem folgenden auf eine Spalte verweisen:

// This accesses the CustomerID column in the first row of the Customers table.
string customerIDValue = northwindDataSet.Customers[0].CustomerID;

Wenn Sie dagegen mit einem nicht typisierten Dataset arbeiten, lautet der entsprechende Code:

string customerIDValue = (string)
    dataset1.Tables["Customers"].Rows[0]["CustomerID"];

Der typisierte Zugriff ist nicht nur einfacher zu lesen, sondern wird auch vollständig von IntelliSense im Code-Editor von Visual Studio unterstützt. Die Syntax für das typisierte Dataset ist nicht nur einfacher zu handhaben, sondern bietet auch eine Typüberprüfung zur Kompilierzeit, wodurch die Möglichkeit von Fehlern bei der Zuweisung von Werten zu Datasetmembern erheblich reduziert wird. Wenn Sie den Namen einer Spalte in Ihrer DataSet-Klasse ändern und dann Ihre Anwendung kompilieren, erhalten Sie einen Buildfehler. Wenn Sie in der Aufgabenliste auf den Buildfehler doppelklicken, können Sie direkt zu der Zeile oder den Zeilen des Codes wechseln, die auf den alten Spaltennamen verweisen. Der Zugriff auf Tabellen und Spalten in einem typisierten Dataset ist auch zur Laufzeit etwas schneller, da der Zugriff zur Kompilierzeit und nicht durch Sammlungen zur Laufzeit bestimmt wird.

Auch wenn typisierte Datasets viele Vorteile haben, ist ein nicht typisiertes Dataset in einer Vielzahl von Fällen nützlich. Das offensichtlichste Szenario ist, wenn kein Schema für das Dataset verfügbar ist. Dies kann z. B. der Fall sein, wenn Ihre Anwendung mit einer Komponente interagiert, die ein Dataset zurückgibt, dessen Struktur Sie aber nicht im Voraus kennen. Es gibt auch Zeiten, in denen Sie mit Daten arbeiten, die keine statische, vorhersehbare Struktur aufweisen. In diesem Fall ist es unpraktisch, ein typisiertes Dataset zu verwenden, da Sie die typisierte Datasetklasse bei jeder Änderung der Datenstruktur neu generieren müssten.

Generell gibt es viele Fälle, in denen Sie ein Dataset dynamisch erstellen, ohne ein Schema zur Verfügung zu haben. In diesem Fall ist das Dataset einfach eine praktische Struktur, in der Sie Informationen aufbewahren können, solange die Daten auf relationale Weise dargestellt werden können. Gleichzeitig können Sie die Fähigkeiten des Datasets nutzen, z. B. die Möglichkeit zur Serialisierung der Informationen, um sie an einen anderen Prozess weiterzugeben oder eine XML-Datei zu schreiben.