Code-Beispiel
Ein Beispiel zum Einsatz der Klasse System.Data.DataSet aus der .NET-Klassenbibliothek.
Autor: Dr. Holger Schwichtenberg
Beschreibung
Die Unterstützung der Extensible Markup Language (XML) ist ein wichtiges Konzept von ADO.NET. Die DataSet-Klasse tauscht Daten in Form von XML-Dokumenten mit ihrer Umwelt aus. Daten in einem DataSet können mit den Möglichkeiten von XML bearbeitet werden.
Obwohl oft behauptet ist es nicht richtig, dass ADO.NET die Daten in einem DataSet auch intern in XML-Datenstrukturen speichert.
Ausgabe eines DataSets als XML
Die DataSet-Klasse besitzt zwei Attribute und zwei Methoden zum Austausch mit XML:- GetXml() liefert einen String mit dem Inhalt des DataSet-Objekts in Form eines XML-Dokuments
- GetXmlSchema() liefert einen String mit der Struktur der Daten im DataSet in Form eines XSD-Schemas
- WriteXml() schreibt die XML-Daten und – optional – das zugehörige XSD-Schema in eine Datei (spezifiziert durch einen URL), ein Stream-Objekt, ein TextWriter-Objekt oder ein XMLWriter-Objekt. Mit dem optionalen zweiten Parameter XmlWriteMode.DiffGram wird ein XML-Dokument im DiffGram-Format erzeugt. Ein DiffGram dokumentiert nicht nur den aktuellen Zustand eines DataSet, sondern auch alle ausgeführten Änderungen.
- ReadXml() liest XML-Daten in ein DataSet-Objekt ein. Mögliche Eingabequellen sind eine Datei (spezifiziert durch einen URL), ein Stream-Objekt, ein TextWriter-Objekt oder ein XmlWriter-Objekt. Die XML-Daten müssen ein XSD-Schema enthalten.
Persistenz von Daten
Classic-ADO unterstützt zwei Formen der Persistierung von Daten: Speicherung in einer Datei oder Speicherung in einem Stream (ab ADO 2.5). Bei der Abspeicherung in einer Datei stehen folgende Formate zur Verfügung: Advanced Data Tablegram (ADTG) und Extensible Markup Language (XML).
ADO.NET unterstützt nur noch XML. Eine Stream-Klasse gibt es im Namespace System.Data nicht. Die XML-Daten können auf jede beliebige Art weiterverarbeitet werden, einschließlich der Möglichkeit, sie mit einem FileStream-Objekt im Dateisystem persistent zu machen.
Beispiel
Die folgende Routine gibt zunächst das XML-Schema eines DataSet-Objekts aus und danach den Inhalt als XML-Dokument.
Programmcodebeispiele Visual Basic .NET (VB.NET)
' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Ausgabe eines DataSet-Objekts als XML
' (C) Holger@Schwichtenberg.de
' ============================
Sub ADONET_DSXML1()
Dim DS As System.Data.DataSet
Dim Com As System.Data.OleDb.OleDbCommand
Dim SQL As String
outtitle("Ausgabe eines DatSet als XML")
' --- DataSet erzeugen
DS = New System.Data.DataSet()
' --- Tabelle einlesen
SQL = "SELECT * FROM Produkte where name like 'Amiga%'"
Dim DA As System.Data.OleDb.OleDbDataAdapter
DA = New System.Data.OleDb.OleDbDataAdapter(SQL, CONNSTRING)
DA.Fill(DS, "EDV-Antik")
' --- XML ausgeben
out("--- Schema:")
out(DS.GetXmlSchema)
out("--- Daten:")
out(DS.GetXml)
End Sub
Programmcodebeispiele CSharp (C#)
using System;
using System.Data;
using System.Data.OleDb;
using System.Xml;
using System.IO;
using FCL_Buch;
namespace FCLBuch._SystemData {
public class SamplesADONETXML {
public void ADONET_DataSetXML1() {
// DataSet als XML ausgeben
FclOutput.PrintOutSubHeader( "Ausgabe eines DatSet als XML" );
// DataSet erzeugen
DataSet ds = new DataSet();
// Tabelle einlesen
string sql = "SELECT * FROM Produkte where name like 'Amiga%'";
OleDbDataAdapter da = new OleDbDataAdapter( sql, ADONET_Globals.ConnectionString );
da.Fill( ds, "EDV-Antik" );
// XML ausgeben
FclOutput.PrintOutSubHeader( "Schema:" );
FclOutput.PrintOut( ds.GetXmlSchema() );
FclOutput.PrintOutSubHeader( "Daten:" );
FclOutput.PrintOut(ds.GetXml() );
}
}
}
Hinweise
Ausgaben werden in den Beispielen durch Hilfsroutinen wie out() und
PrintOut() erzeugt. Diese sind hier nicht angegeben, da deren Implementierung
von der jeweiligen Umgebung abhängt. Für Konsolenanwendungen können hier z.B.
Console.WriteLine() einsetzen.
Querverweise
Liste aller Codebeispiele
Definition '.NET Framework Class Library'
Verfügbarkeit der Klasse 'System.Data.DataSet'
Übersicht über den FCL-Namensraum 'System.Data'
.NET & Visual Studio Community Portal