Kursinhalt
Einführung in .NET mit C#
Einführung in .NET mit C#
Datareader vs. Dataset
Im letzten Abschnitt haben wir das Objekt MySqlDataReader
verwendet, um Daten aus der Datenbank zu lesen.
Theoretisch ruft DataReader (oder MySqlDataReader
) beim Ausführen einer Abfrage nicht alle Daten auf einmal ab. Stattdessen werden die Daten sequenziell abgerufen, das heißt, jeweils eine Zeile. Wenn die Methode Read() ausgeführt wird, wird die nächste Zeile in Echtzeit aus der Datenbank abgerufen.
Deshalb ist während des Datenabrufs eine aktive Verbindung zur Datenbank erforderlich. Das erklärt auch, warum das DataReader-Objekt nach dem Abrufen der Daten geschlossen werden muss.
Andererseits gibt es eine weitere Methode zum Abrufen von Daten, nämlich über einen DataAdapter. Ein DataAdapter holt die relevanten Daten aus der Datenbank und füllt damit ein DataSet, wodurch im Wesentlichen eine Kopie dieser Daten erstellt wird. Ein DataSet ist eine spezielle Klasse zur Speicherung von aus einer SQL-Datenbank abgerufenen Daten. Auf die Daten in einem DataSet kann einfach zugegriffen und diese angezeigt werden.
Obwohl beide Methoden ähnlich erscheinen, gibt es zwischen DataReader und DataSet einige wesentliche Unterschiede:
Speicherverbrauch und Speicherung:
DataReader ruft Datensätze einzeln aus der Datenbank ab und hält während des Lesens eine Verbindung offen. Die Daten werden nicht im Speicher abgelegt. Dies führt zu minimalem Speicherverbrauch;
DataSet speichert die aus der Datenbank abgerufenen Daten im Speicher der Anwendung.
Zugänglichkeit und Navigation:
DataReader bietet einen schnellen, nur vorwärts gerichteten Datenstrom. Er ermöglicht sequenziellen Zugriff auf die Daten und unterstützt keinen wahlfreien Zugriff oder Navigation. Ein einmal gelesener Datensatz kann nicht erneut aufgerufen werden, es sei denn, die Abfrage wird erneut ausgeführt;
DataSet ermöglicht das Durchlaufen der Zeilen in beliebiger Reihenfolge und das Ändern von Daten innerhalb des DataSet, ohne die Originaldaten in der Datenbank zu beeinflussen.
Echtzeit- vs. getrennte Verbindung:
DataReader bietet Echtzeitzugriff auf Daten aus der Datenbank. Er erfordert eine aktive Verbindung zur Datenbank während des Lesens der Daten, und die Verbindung bleibt geöffnet, bis alle Daten gelesen wurden oder bis der DataReader explizit geschlossen wird;
DataSet bietet getrennten Zugriff auf Daten. Sobald die Daten aus der Datenbank abgerufen und im DataSet gespeichert wurden, kann die Verbindung zur Datenbank geschlossen werden. Die Daten stehen dann innerhalb der Anwendung zur Verfügung und können offline bearbeitet werden, ohne eine Verbindung zur Datenbank aufrechtzuerhalten.
Aus den oben genannten Vor- und Nachteilen lässt sich schließen, dass DataReader für Szenarien geeignet ist, in denen nur vorwärts gerichteter Zugriff auf Daten ausreicht, während DataSet besser für Szenarien geeignet ist, in denen die Verbindungszeit minimiert werden soll und interaktiv mit Daten gearbeitet werden muss.
1. Welche der folgenden Aussagen über DataReader ist richtig?
2. Was speichert ein DataSet im Speicher?
Danke für Ihr Feedback!