Sie sind hier: Startseite
 Liste aller Codebeispiele

Veränderung eines DataSet-Objekts via XML

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

Autor: Dr. Holger Schwichtenberg 

Beschreibung

Ein XmlDataDocument-Objekt ermöglicht die Bearbeitung des Inhalts eines DataSet-Objekts über das XML Document Object Model (DOM). Die Klasse System.Xml.XmlDataDocument ist abgeleitet von der Klasse System.Xml.XmlDocument.

Ein XmlDataDocument-Objekt ist keine Kopie der XML-Daten, sondern eine andere Sicht auf ein DataSet. Der Konstruktor der XmlDataDocument-Klasse wird mit einem DataSet-Objekt aufgerufen.

DD = New System.Xml.XmlDataDocument(DS)

Danach wirken alle Änderungen in dem XmlDataDocument-Objekt sofort auf das DataSet und umgekehrt. Um ein XmlDataDocument-Objekt beschreiben zu können, ist Voraussetzung, dass in dem zugehörigen DataSet die Konsistenzprüfungen ausgeschaltet sind.

DS.EnforceConstraints = False

Beispiel
In der folgenden Routine wird zunächst ein DataSet mit einer Tabelle ("SELECT * FROM Produkte where name like 'Amiga%'") erzeugt. Daraus wird ein XmlDataDocument-Objekt abgeleitet. Dieses Dokument wird mit den Methoden des XML-DOM ausgegeben (GetOuterXML()), durchsucht (XN=SelectSingleNode()) und geändert (XN.InnerText = WERT). Zum Beweis, dass diese Änderungen auf das DataSet durchschlagen, wird das DataSet in XML-Form ausgegeben (DS.GetXml). Die Änderungen werden zum Schluss mit Hilfe eines OleDbCommandBuilder-Objekts an die Datenquelle (hier: die Access-Datenbank EDVShop.mdb) zurückgesandt.

Programmcodebeispiele Visual Basic .NET (VB.NET)

' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Veränderung eines DataSet-Objekts via XML
' (C) Holger@Schwichtenberg.de
' ============================
Sub ADONET_DSXML2()
Dim DS As System.Data.DataSet
Dim Com As System.Data.OleDb.OleDbCommand
Dim SQL As String

outtitle("Veränderung eines DataSet-Objekts via 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")

' --- DataDocument erzeugen
Dim DD As System.Xml.XmlDataDocument
DD = New System.Xml.XmlDataDocument(DS)

' --- bestimmtes Element finden
Dim XN As System.Xml.XmlNode
XN = DD.SelectSingleNode("*//EDV-Antik[Name='Amiga 500']/Preis")

' --- Änderungen zulassen
DS.EnforceConstraints = False

' --- alten Wert auslesen
Dim alterpreis As Double
alterpreis = CType(XN.InnerText, Double)

' --- Neuen Wert ermitteln
Dim neuerpreis As Double
neuerpreis = alterpreis * 1.5

' --- Neuen Wert setzen
XN.InnerText = neuerpreis.ToString

' --- Ausgabe der Änderung
out("Preis wurde von " _
& alterpreis & " € auf " _
& neuerpreis & " € erhöht!")

' --- Kontrollausgabe des DataSets
out("--- DataSet nach Änderung:")
out(DS.GetXml)

' --- Speicherung vorbereiten
Dim CB As System.Data.OleDb.OleDbCommandBuilder
CB = New OleDbCommandBuilder(DA)

' --- Speicherung des DataSets
DA.Update(DS, "EDV-Antik")
out("Änderungen gespeichert!")

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_DataSetXML2() {

//Veränderung eines DataSets via XML
FclOutput.PrintOutSubHeader( "Veränderung eines DataSets via 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" );

// DataDocument erzeugen
XmlDataDocument dd = new XmlDataDocument( ds );

// XML-Baum ausgeben
FclOutput.PrintOut( dd.OuterXml );

// bestimmtes Element finden
XmlNode node = dd.SelectSingleNode( "*//EDV-Antik[Name='Amiga 500']/Preis" );

// Änderungen zulassen
ds.EnforceConstraints = false;

// alten Wert auslesen
double oldPrice = Double.Parse(node.InnerText);

// Neuen Wert ermitteln
double newPrice = oldPrice * 1.5d;

// Neuen Wert setzen
node.InnerText = newPrice.ToString();

// Ausgabe der Änderung
FclOutput.PrintOut( "Preis wurde von " + oldPrice + " € auf " + newPrice + " € erhöht!" );

// Kontrollausgabe des DataSets
FclOutput.PrintOutSubHeader( "DataSet nach Änderung:" );
FclOutput.PrintOut( ds.GetXml() );

// Speicherung vorbereiten
OleDbCommandBuilder cb = new OleDbCommandBuilder( da );

// Speicherung des DataSets
da.Update( ds, "EDV-Antik" );
FclOutput.PrintOut( "Änderungen gespeichert!" );
}
}
}

Querverweise

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