Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1171-0
Pfeil 26 Offline mit DataSet
Pfeil 26.1 Das DataSet-Objekt verwenden
Pfeil 26.1.1 Ein DataSet-Objekt erzeugen
Pfeil 26.1.2 Anatomie einer DataTable
Pfeil 26.1.3 Zugriff auf eine Tabelle im DataSet
Pfeil 26.1.4 Zugriff auf die Ergebnisliste
Pfeil 26.1.5 Dateninformationen in eine XML-Datei schreiben
Pfeil 26.2 DataSet mit Schemainformationen
Pfeil 26.2.1 Schemainformationen bereitstellen
Pfeil 26.2.2 Gültigkeitsprüfung in einer DataColumn
Pfeil 26.2.3 Constraints-Klassen einer DataTable
Pfeil 26.2.4 Tabellenschema durch Programmcode
Pfeil 26.2.5 Tabellenschema durch DataAdapter
Pfeil 26.2.6 Tabellenschema aus einer XML-Datei
Pfeil 26.3 Änderung einer Tabelle
Pfeil 26.3.1 Editieren einer Datenzeile
Pfeil 26.3.2 Löschen einer Datenzeile
Pfeil 26.3.3 Neue Datenzeile hinzufügen
Pfeil 26.4 Änderung einer Datenzeile
Pfeil 26.4.1 Aktualisierungszustand
Pfeil 26.4.2 Ursprünglicher und aktualisierter Inhalt
Pfeil 26.4.3 Zeilenstatus manuell steuern
Pfeil 26.5 Mit mehreren Tabellen arbeiten
Pfeil 26.5.1 JOIN-Abfragen
Pfeil 26.5.2 Mehrere Tabellen in einem DataSet
Pfeil 26.5.3 Tabellenbeziehungen erzeugen
Pfeil 26.5.4 DataRelations und Einschränkungen
Pfeil 26.5.5 In Beziehung stehende Daten suchen
Pfeil 26.5.6 Ergänzung zum Speichern von Schemainformationen in einer XML–Schemadatei
Pfeil 26.6 Suchen und Filtern
Pfeil 26.6.1 Find
Pfeil 26.6.2 Select
Pfeil 26.7 Objekte vom Typ DataView
Pfeil 26.7.1 Initialisierung
Pfeil 26.7.2 Zugriff auf die Datenzeilen
Pfeil 26.7.3 Spalten durchsuchen
Pfeil 26.7.4 Mehrdeutige Suchergebnisse
Pfeil 26.7.5 Datenfilter
Pfeil 26.7.6 Statusfilter
Pfeil 26.7.7 Änderungen
Pfeil 26.7.8 DataView in DataTable umwandeln


Rheinwerk Computing - Zum Seitenanfang

26.7 Objekte vom Typ DataView Zur nächsten ÜberschriftZur vorigen Überschrift

Wenn Sie die Select-Methode der DataTable benutzen, sollten Sie sich über zwei Nachteile im Klaren sein:

  • Sie arbeitet nicht effizient mit den Daten.
  • Der Rückgabewert ist immer ein DataRow-Array, das von Windows-Forms und Webformularen nicht unterstützt wird.

Diese Nachteile haben DataView-Objekte nicht. Sie repräsentieren eine einfache Möglichkeit, verschiedene Sichten auf einen Datenbestand anzubieten – ähnlich den Views einer Datenbank. Ausgangsbasis für eine DataView ist jedoch kein SQL, sondern eine DataTable. So könnte man zum Beispiel eine DataTable mit den Bestellungen eines Kunden füllen und eine DataView erzeugen, die nur die Bestellungen anzeigt, die noch offen sind. Eine weitere DataView könnte gleichzeitig alle Bestellungen darstellen, die schon abgeschlossen sind.

Der wesentliche Vorteil dieser Methode ist, dass im Gegensatz zur Select-Methode mehrere Sichten gleichzeitig angezeigt werden können, ohne eine Kopie der Daten zu erstellen. Außerdem werden DataView-Objekte automatisch aktualisiert, sobald sich die Daten in der DataTable ändern. Zudem bietet eine DataView eine bessere Unterstützung für das Filtern von Daten als das DataTable-Objekt.

Ein DataView-Objekt verwaltet keine eigene Kopie der Daten, sondern referenziert die Tabellendaten. Bitte beachten Sie, dass ein DataView-Objekt nur mit einer Tabelle verbunden ist: Daten aus verschiedenen Tabellen lassen sich also nicht kombinieren.


Rheinwerk Computing - Zum Seitenanfang

26.7.1 Initialisierung Zur nächsten ÜberschriftZur vorigen Überschrift

Die Klasse DataView definiert drei Konstruktoren. Wenn Sie den parameterlosen Konstruktor benutzen, müssen Sie in einer weiteren Anweisung das DataView-Objekt mit einer DataTable verknüpfen. Dazu dient die Eigenschaft Table:

Dim dv As DataView = New DataView() 
dv.Table = ds.Tables(0)

Der einfach parametrisierte Konstruktor nimmt die Referenz auf die DataTable entgegen:

Dim dv As DataView = New DataView(ds.Tables(0))

Der dritte Konstruktor erinnert an die Select-Methode der Klasse DataTable. Im ersten Parameter erwartet er die Referenz auf die DataTable, im zweiten wird ein Filterkriterium angegeben, im dritten das Sortierkriterium und schließlich im vierten ein Wert vom Typ DataRowViewState.

Dim dv As DataView = New DataView(tbl, "", "", DataViewRowState.Unchanged)

Der letzte Konstruktor weist den Eigenschaften

  • Table
  • RowFilter
  • Sort
  • RowStateFilter

der DataView die gewünschten Werte zu.


Rheinwerk Computing - Zum Seitenanfang

26.7.2 Zugriff auf die Datenzeilen Zur nächsten ÜberschriftZur vorigen Überschrift

Während Sie über die Eigenschaft Rows einer DataTable an die Auflistung aller Datenzeilen einer DataTable gelangen, verhält sich eine DataView selbst wie eine Collection. Sie können sie daher in einer For Each-Schleife durchlaufen. Die zurückgelieferte Datenzeile ist vom Typ DataRowView.

Die DataRowView werten Sie aus, indem Sie dem Indexer den Bezeichner der Spalte oder dessen Index übergeben:

Dim dv As DataView = New DataView(ds.Tables("Artikel")) 
For Each rowView As DataRowView in dv 
  Console.WriteLine(rowView("ProductName")) 
Next

Als Auflistung verfügt eine DataView über die Eigenschaft Count, die die Anzahl der DataRowView-Objekte zurückliefert (praktisch für For-Schleifen).


Rheinwerk Computing - Zum Seitenanfang

26.7.3 Spalten durchsuchen Zur nächsten ÜberschriftZur vorigen Überschrift

Die Find-Methode einer DataView dient dazu, eine ganz bestimmte Datenzeile zu suchen. Dazu wird der Sort-Eigenschaft zuvor ein einzelner Spaltenbezeichner zugewiesen, optional gefolgt von ASC (aufsteigend) oder DESC (absteigend). Der Find-Methode wird dann der Wert übergeben, nach dem in der unter Sort angegebenen Spalte gesucht wird.

Die Find-Methode gibt den Index der gefundenen Datenzeile in der DataView zurück oder -1, wenn keine passende Datenzeile gefunden wurde:

Dim dv As DataView = New DataView(ds.Tables(0)) 
dv.Sort = "ProductName" 
Dim index As Integer = dv.Find("Chai") 
If index <> –1 Then 
  Console.WriteLine("Artikel: {0}", dv(index)("UnitPrice")) 
Else 
  Console.WriteLine("Keine Datenzeile gefunden.") 
End If

Rheinwerk Computing - Zum Seitenanfang

26.7.4 Mehrdeutige Suchergebnisse Zur nächsten ÜberschriftZur vorigen Überschrift

Die Find-Methode einer DataRowCollection und die Find-Methode einer DataView ähneln sich, denn beide liefern nur eine Datenzeile zurück: Die Find-Methode der DataRowCollection tut das, weil der zu suchende Primärschlüssel prinzipbedingt eindeutig ist, und die Find-Methode der DataView tut das, weil sie per Definition nur einen Integer-Wert liefert.

Wenn Sie zum Beispiel eine Sicht auf die Tabelle der Lieferanten erstellen und der Sort-Eigenschaft eine Stadt übergeben, könnte es sein, dass mehrere Lieferanten in der angegebenen Stadt sesshaft sind. In diesem Fall ist die Find-Methode ungeeignet. Eine DataView stellt für solche Fälle die Methode FindRows bereit, die ein DataRowView-Array liefert:

Dim dv As DataView = New DataView(ds.Tables(0)) 
dv.Sort = "CategoryID" 
Dim rowArr() As DataRowView = dv.FindRows(1) 
For Each row As DataRowView  in rowArr 
  Console.WriteLine("Artikel: {0}", row("ProductName")) 
Next

Das Codefragment druckt die Artikel der Tabelle Products mit der Kategorie-Nummer 1.


Rheinwerk Computing - Zum Seitenanfang

26.7.5 Datenfilter Zur nächsten ÜberschriftZur vorigen Überschrift

Die Eigenschaft RowFilter spezifiziert, analog zur Select-Methode der DataTable, einen Filterausdruck zur Selektion von Datenzeilen in der Sicht. Das ist fast identisch zu einer WHERE-Klausel in einer SQL-Abfrage, es fehlt nur das WHERE selbst.

Dim dv As DataView = New DataView(ds.Tables(0)) 
dv.RowFilter = "ProductName LIKE 'C*'" 
For Each rowView As DataRowView  in dv 
  Console.WriteLine(rowView("ProductName")) 
Next

Rheinwerk Computing - Zum Seitenanfang

26.7.6 Statusfilter Zur nächsten ÜberschriftZur vorigen Überschrift

Die Eigenschaft RowStateFilter akzeptiert Werte der Enumeration DataViewRowState (siehe Tabelle 26.8). Während Select in DataTable für ModifiedCurrent und ModifiedOriginal die gleiche Ausgabe erzeugt, greift DataView auf die aktuellen bzw. die ursprünglichen Werte zu.

Dim dv As DataView = New DataView(ds.Tables(0)) 
dv.RowStateFilter = DataViewRowState.Added | DataViewRowState.Deleted 
For Each rowView As DataRowView  in dv 
  Console.WriteLine(rowView("ProductName")) 
Next

Rheinwerk Computing - Zum Seitenanfang

26.7.7 Änderungen Zur nächsten ÜberschriftZur vorigen Überschrift

Eine DataView ist nicht statisch. Sie können zusätzliche DataRowView-Objekte hinzufügen, eine DataRowView löschen oder deren Inhalt ändern.

Um eine DataRowView hinzuzufügen, verwenden Sie die Methode AddNew in DataView. Sie gibt ein neues DataRowView-Objekt zurück, dessen Spalten mit Daten gefüllt werden. Zum Schluss muss auf der DataRowView die Methode EndEdit aufgerufen werden.

Die Änderung ähnelt der einer DataRow. Mit BeginEdit wird die Änderung eingeleitet und mit EndEdit abgeschlossen. Ein Abbruch erfolgt mit CancelEdit, während Delete die Zeile löscht. Alles sind Methoden des DataRowView-Objekts.

Das folgende Beispielprogramm zeigt Ihnen alle zuvor beschriebenen Änderungsmöglichkeiten. Ausgegeben werden am Ende des Programms nur die geänderten DataRowViews. Dazu wird der Eigenschaft RowStateFilter eine passende Kombination aus den erforderlichen DataRowViewState-Konstanten übergeben:


'...\ADO\DataSet\Select.vb

Option Strict On 
Imports System.Data.Common, System.Data.SqlClient 
Namespace ADO 
  Module Sichten 
    Sub Test() 
      Dim conn As DbConnection = New SqlConnection() 
      conn.ConnectionString = "Data Source=(local);" & _ 
          "Initial Catalog=Northwind;Integrated Security=sspi" 
      Dim cmd As DbCommand = New SqlCommand() 
      cmd.CommandText = "SELECT ProductName, UnitPrice FROM Products" 
      cmd.Connection = conn 
      Dim ds As New DataSet() 
      Dim da As DbDataAdapter = New SqlDataAdapter() 
      da.SelectCommand = cmd 
      da.Fill(ds)

      ' DataView erzeugen 
      Dim dv As DataView = New DataView(ds.Tables(0))

      ' DataRowView hinzufügen 
      Dim newRow As DataRowView = dv.AddNew() 
      newRow("ProductName") = "Schokolade" 
      newRow("UnitPrice") = 15.99 
      newRow.EndEdit()

      ' DataRowView ändern 
      dv(0).BeginEdit() 
      dv(0)("ProductName") = "Eisbein" 
      dv(0).EndEdit()

      ' DataRowView löschen 
      dv(1).Delete()

      ' Ausgabe der DataView 
      dv.RowStateFilter = DataViewRowState.Added Or _ 
        DataViewRowState.Deleted Or DataViewRowState.ModifiedOriginal 
      For Each rowView As DataRowView In dv 
        Console.WriteLine(rowView("ProductName")) 
      Next

      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Rheinwerk Computing - Zum Seitenanfang

26.7.8 DataView in DataTable umwandeln topZur vorigen Überschrift

Ihnen liegt eine DataView vor, und Sie möchten diese nun als DataTable speichern? Kein Problem, denn mit der Methode ToTable werden alle Datenzeilen in eine DataTable kopiert.

Da ToTable überladen ist, haben Sie mehrere Alternativen, diesen Vorgang zu steuern. So können Sie den Namen der DataTable schon beim Methodenaufruf festlegen und die Spalten festlegen. die der DataTable übergeben werden sollen. In einem weiteren Parameter spezifizieren Sie, ob die resultierende DataTable nur eindeutige Zeilen enthält, basierend auf den angegebenen DataColumns.

Ein Beispiel mit ToTable schließt dieses Kapitel ab. Zuerst werden die Spalten ProductName, UnitPrice und UnitsInStock der Tabelle Products in eine DataTable geladen. Eine DataView beschränkt die Sicht auf einen Teilbereich dieser DataTable und enthält nur die Datenzeilen der Artikel, die mit dem Buchstaben »C« beginnen und deren Einzelpreis kleiner 30 ist. Mit

Dim tbl As DataTable = dv.ToTable( _ 
  "C_Products", False, New String() {"UnitPrice", "ProductName" })

wird die DataView danach in eine DataTable namens C_Products geschrieben. Die neue DataTable enthält nur die Spalten UnitPrice und ProductName. Der boolesche Parameter legt fest, ob alle Zeilen eindeutig sind. Er ist hier auf False festgelegt, sodass auch zwei inhaltsgleiche Zeilen in der resultierenden DataTable erscheinen dürfen.


'...\ADO\DataSet\ToTable

Option Strict On 
Imports System.Data.Common, System.Data.SqlClient 
Namespace ADO 
  Module ToTable 
    Sub Test() 
      Dim conn As DbConnection = New SqlConnection() 
      conn.ConnectionString = "Data Source=(local);" & _ 
          "Initial Catalog=Northwind;Integrated Security=sspi" 
      Dim cmd As DbCommand = New SqlCommand() 
      cmd.CommandText = _ 
        "SELECT ProductName, UnitPrice, UnitsInStock FROM Products" 
      cmd.Connection = conn 
      Dim ds As New DataSet() 
      Dim da As DbDataAdapter = New SqlDataAdapter() 
      da.SelectCommand = cmd 
      da.Fill(ds)

      ' DataView erzeugen 
      Dim dv As DataView = New DataView(ds.Tables(0)) 
      dv.RowFilter = "ProductName LIKE 'C*' AND UnitPrice < 30"

      ' Umwandlung 
      Dim tbl As DataTable = dv.ToTable( _ 
        "C_Products", False, New String() {"ProductName", "UnitPrice"})

      For Each row As DataRow In tbl.Rows 
        Console.WriteLine("{0,-30}{1}", row(0), row(1)) 
      Next 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual Basic 2008
Visual Basic 2008
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern