Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.

  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint
Share this Page URL
Help

4. Einführung ADO.NET > Das DataReader-Objekt

Das DataReader-Objekt

Häufig genügt ein Lesezugriff auf die Datensätze. Dabei müssen im Frontend meist nur einige für die Listendarstellung benötigte Komponenten gefüllt bzw. aktualisiert werden (ListBox, ComboBox, ListView, TreeView, DataGrid usw.). Aber auch für komplexere Logik innerhalb der Business-Objekte der mittleren Schicht (Middle-Tier) ist häufig nur ein ReadOnly-Zugriff auf Datensätze erforderlich.

Im .NET Framework gibt es für diesen Zweck den DataReader. Diese Klasse ist für einen einmaligen ReadOnly-Hochgeschwindigkeitszugriff auf eine Datensatzgruppe optimiert und ähnelt anderen Reader-Objekten wie TextReader, StreamReader und XmlReader.

In Abhängigkeit vom verwendeten .NET-Datenprovider gibt es auch hier unterschiedliche Typen (SqlData-Reader, OleDbDataReader).

DataReader erzeugen

Einen DataReader erzeugt man in der Regel nicht mit dem New-Konstruktor, sondern mit der Execute-Reader-Methode des zugrunde liegenden Command-Objekts:

Dim dr As DataReader = cmd.ExecuteReader()

Mitunter wird auch dem Execute-Konstruktor als Argument der Wert CloseConnection (aus der CommandBehavior-Enumeration) übergeben. Damit ist gewährleistet, dass die Verbindung automatisch nach dem Durchlauf des DataReaders geschlossen wird.

Beispiel

Ein DataReader, der das Schließen des Connection-Objekts erledigt, wird instanziiert.

Dim dr As DataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

Daten lesen

Das Auslesen der Informationen innerhalb einer Schleife ist typisch für die Arbeit mit dem DataReader.

Beispiel

Die Kundentabelle aus Nordwind.mdb wird zeilenweise in eine ListBox ausgelesen.

Const SQL As String = "SELECT * FROM Kunden ORDER BY KundenCode"
Dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=Nordwind.mdb;")
Dim cmd As New OleDbCommand(SQL, conn)
conn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader()
Dim str As String = String.Empty
Dim tab As String = "  "
While dr.Read()
    str = dr("KundenCode").ToString & tab
    str &= dr("Firma").ToString & tab
    str &= dr("Kontaktperson").ToString & tab
    str &= dr("Strasse").ToString & tab
    str &= dr("PLZ").ToString & tab
    str &= dr("Ort").ToString
    ListBox1.Items.Add(str)
End While
dr.Close()
conn.Close()

Hinweis

Es ist wichtig, dass Sie den DataReader so schnell wie möglich nach dem Auslesen der Daten wieder schließen, da sonst das Connection-Objekt blockiert ist!

Hier das Ergebnis:

Laufzeitansicht

Abbildung 4.12 Laufzeitansicht

Hinweis

Weitere Beispiele zum Thema finden Sie im How-to 6.10 »... mit DataReader und ListView arbeiten?« und im How-to 14.9 »... die MARS-Technologie kennen lernen?«.

Eigenschaften des DataReaders

Item-Eigenschaft

Diese Eigenschaft ermöglicht den Zugriff auf die aktuelle Spalte, der Rückgabewert ist vom Object-Datentyp (ähnlich der Item-Eigenschaft des DataRow-Objekts). Falls der Datentyp vorher bekannt ist, sollte man eine der Get-Methoden (siehe unten) für den Zugriff verwenden.

FieldCount-Eigenschaft

Diese Eigenschaft liefert die Gesamtzahl der Datensätze.

IsClosed-Eigenschaft

Der Wert ist True, falls der DataReader geschlossen ist.

Methoden des DataReaders

Read-Methode

Damit wird das automatische Weiterbewegen zum nächsten Datensatz innerhalb der While-Schleife ermöglicht (Rückgabewert True/False).

GetValue- und GetValues-Methode

Während GetValue – ähnlich der Item-Eigenschaft – den Wert einer Spalte (basierend auf dem Spalten-index) zurückgibt, nimmt GetValues ein Array entgegen, in welchem der DataReader den Inhalt der aktuellen Zeile ablegt. Mit GetValues wird beste Performance erreicht.

GetOrdinal- und ähnliche Methoden

Eine Vielzahl von Get...-Methoden ermöglichen ein Konvertieren der gelesenen Werte in fast jeden Datentyp.

Beispiel

Ein Datumswert aus der Employee-Tabelle der Northwind-Datenbank wird ausgelesen.

Dim aDate As DateTime
aDate = dr.GetDateTime(dr.GetOrdinal("BirthDate"))
  • Safari Books Online
  • Create BookmarkCreate Bookmark
  • Create Note or TagCreate Note or Tag
  • PrintPrint