Sie sind hier: Startseite
 Liste aller Codebeispiele

Ausgabe einer Tabelle mit Hilfe eines DataSet-Objekts

Ein Beispiel zum Einsatz der Klasse System.Data.DataSet aus der .NET-Klassenbibliothek.

Autor: Dr. Holger Schwichtenberg 

Beschreibung

Um auf eine Datenbanktabelle mit einem DataSet-Objekt lesend zuzugreifen, sind folgende Schritte notwendig:
  • Aufbau einer Datenbankverbindung mit einem OleDbConnection-Objekt
  • Instanziierung eines DataSet-Objekts
  • Instanziierung eines OleDbDataAdapter-Objekts unter Verwendung des OleDbConnection-Objekts und eines SQL-Befehls
  • Ausführen der Abfrage und Füllen des DataSet-Objekts mit der Ergebnismenge durch die Methode Fill()
  • Auslesen der Daten
  • Schließen der Verbindung (Close())

Alternativ zur expliziten Instanziierung eines OleDbConnection-Objekts kann eine Verbindungszeichenfolge auch bei der Instanziierung des OleDbDataAdapter-Objekts übergeben werden. Dann besteht die Verbindung nur für einen Befehl. Der Data Adapter baut dann die Verbindung erst mit Ausführung der Fill()-Methode auf und direkt danach wieder ab.

Beispiel
Das folgende einfache Beispiel zeigt das Einlesen einer einzelnen Tabelle in einem DataSet. Datenquelle ist die auf der Buch-CD enthaltene Access-Datenbank EDVShop.mdb. Aus allen Datensätzen aus der Quelltabelle "Produkte", die zur Produktkategorie 23 gehören ("SELECT * FROM Produkte WHERE kategorie=23"), wird im DataSet eine DataTable mit dem Namen "EDV-Antik" erzeugt.
Diese Tabelle wird im Folgenden in drei Formen ausgegeben: Zunächst durchläuft das Programm alle Datensätze über die DataRows-Collection und gibt nur die Spalten "Name" und "Preis" aus. Anschließend wird die komplette Tabelle (einschließlich der Spaltenüberschriften) als CSV-Liste durch die Hilfsroutine tabletocsv() ausgegeben. Als Drittes erfolgt die Ausgabe als XML-Dokument durch die Methode GetXml() des DataSet-Objekts.

Programmcodebeispiele Visual Basic .NET (VB.NET)

' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Ausgabe einer Tabelle mit Hilfe eines DataSet-Objekts
' (C) Holger@Schwichtenberg.de
' ============================
Sub ADONET_DS1()
Dim DS As System.Data.DataSet
Dim Com As System.Data.OleDb.OleDbCommand
Dim SQL As String
Dim DR As DataRow
Dim DT As DataTable

outtitle("Produktliste mit DataSet ausgeben")

' --- DataSet erzeugen
DS = New System.Data.DataSet()

' --- Einlesen vorbereiten
SQL = "SELECT * FROM Produkte WHERE kategorie=23"
Dim DA As System.Data.OleDb.OleDbDataAdapter
DA = New System.Data.OleDb.OleDbDataAdapter(SQL, CONNSTRING)

' --- Tabelle lesen
DA.Fill(DS, "EDV-Antik")

' --- Ausgabe #1
out("### Preisliste")

' Zugriff auf Tabelle
DT = DS.Tables("EDV-Antik")

' Anzahl der Datensätze ausgeben
out("Anzahl Produkte: " & DT.Rows.Count)

' Schleife über alle Datensätze
For Each DR In DT.Rows
out(DR("name").ToString & " kostet " & DR("Preis").ToString)
' Zwei Alternativen:
'out(DR!name.ToString & " kostet " & DR!Preis.ToString)
'out(DR.Item("name").ToString & " kostet " & DR.Item("Preis").ToString)
Next

' --- Ausgabe #2
out("### Inhalt der Tabelle als CSV:")
out(tabletocsv(DS.Tables("EDV-Antik")))

' --- Ausgabe #3
out("### Inhalt der Tabelle als XML:")
out(DS.GetXml)

End Sub

Programmcodebeispiele CSharp (C#)

using System;
using System.Data;
using System.Data.OleDb;

using FCL_Buch;

namespace FCLBuch._SystemData {

public class SamplesADONETDataSet {

public void ADONET_DataSet1() {

// Ausgabe einer Tabelle mit Hilfe eines DataSet-Objekts
FclOutput.PrintOutSubHeader( "Produktliste mit DataSet ausgeben" );

// DataSet erzeugen
DataSet ds = new DataSet();

// Einlesen vorbereiten
string sql = "SELECT * FROM Produkte WHERE kategorie=23";
OleDbDataAdapter da = new OleDbDataAdapter( sql, ADONET_Globals.ConnectionString );

// Tabelle lesen
da.Fill( ds, "EDV-Antik" );

// Ausgabe #1
FclOutput.PrintOutSubHeader( "Preisliste" );

// Zugriff auf Tabelle
DataTable dt = ds.Tables["EDV-Antik"];

// Anzahl der Datensätze ausgeben
FclOutput.PrintOut( "Anzahl Produkte: " + dt.Rows.Count.ToString() );

// Schleife über alle Datensätze
foreach ( DataRow dr in dt.Rows ) {
FclOutput.PrintOut(dr["name"].ToString() + " kostet " + dr["Preis"].ToString() );
// Alternative:
// FclOutput.PrintOut(dr["name"].ToString() + " kostet " + dr["Preis"].ToString() );
}

// Ausgabe #2
FclOutput.PrintOutSubHeader( "Inhalt der Tabelle als CSV:" );
FclOutput.PrintOut( ADONET_HelperMethods.TableToCsv( ds.Tables["EDV-Antik"] ) );

// Ausgabe #3
FclOutput.PrintOutSubHeader( "Inhalt der Tabelle als XML:" );
FclOutput.PrintOut( ds.GetXml() );

}
}
}

Querverweise

 Definition '.NET Framework Class Library'  Verfügbarkeit der Klasse 'System.Data.DataSet'  Übersicht über den FCL-Namensraum 'System.Data'  .NET & Visual Studio Community Portal