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 28 Stark typisierte DataSets
Pfeil 28.1 Erzeugung
Pfeil 28.1.1 Visual Studio Designer
Pfeil 28.1.2 Das Kommandozeilentool XSD.exe
Pfeil 28.2 Anatomie
Pfeil 28.2.1 Grobstruktur: Datentypen
Pfeil 28.2.2 Das typisierte DataSet
Pfeil 28.2.3 TableAdapter
Pfeil 28.2.4 Typisierte Tabelle
Pfeil 28.2.5 Typisierte Zeile
Pfeil 28.3 Datenzugriff
Pfeil 28.3.1 Datenzeilen ausgeben
Pfeil 28.3.2 Datenzeilen hinzufügen
Pfeil 28.3.3 Datenzeilen bearbeiten
Pfeil 28.3.4 Datenzeilen suchen
Pfeil 28.3.5 Spalten mit Null-Wert
Pfeil 28.3.6 Tabellenbeziehungen
Pfeil 28.4 Ein typisiertes DataSet manuell erzeugen
Pfeil 28.4.1 DataTable erzeugen
Pfeil 28.4.2 Spalten hinzufügen
Pfeil 28.4.3 Tabellenbeziehungen erstellen
Pfeil 28.5 TableAdapter erzeugen
Pfeil 28.5.1 Visual Studio Assistent
Pfeil 28.6 TableAdapter verwenden
Pfeil 28.6.1 Datenbeschaffung mit Fill
Pfeil 28.6.2 Datenbeschaffung mit GetData
Pfeil 28.6.3 Aktualisierung mit Update
Pfeil 28.6.4 Aktualisieren mit UpdateAll
Pfeil 28.6.5 Direkte Aktualisierung der Datenbank
Pfeil 28.6.6 TableAdapter mit mehreren Abfragen
Pfeil 28.6.7 TableAdapter ändern
Pfeil 28.7 Fazit: Typisierte oder nicht typisierte DataSets?

Die lokal gehaltenen Daten konnten bisher alle Arten von Daten einer Datenbank aufnehmen. Dies ist zwar flexibel, aber Fehler machen sich erst zur Laufzeit bemerkbar. In diesem Kapitel wird die Typisierung der Daten erzwungen, so dass bereits der Compiler Fehler erkennen kann.

28 Stark typisierte DataSets

In den vorangegangenen Kapiteln haben Sie alles Wesentliche im Zusammenhang mit der Klasse DataSet erfahren. Grundsätzlich wird zwischen zwei Arten von DataSets unterschieden: zwischen den untypisierten und den typisierten DataSets. Bisher haben wir uns mit dem untypisierten DataSet beschäftigt. Nun werde ich Ihnen die typisierte Variante mit ihren Stärken und Schwächen vorstellen. Typisierte DataSets werden automatisch erstellt, unter anderem mit dem Designer von Visual Studio.

Ein stark typisiertes DataSet ist eine Klassendefinition, die von der Klasse DataSet abgeleitet ist. Es enthält Eigenschaften und Methoden, die auf der Struktur der Datenbankabfrage basieren. Darüber hinaus sind in einem typisierten DataSet Klassen für die DataTable- und die DataRow-Objekte definiert. Die Konkretisierung auf eine spezielle Art von Datenbankabfrage führt zu eigenen Datentypen für jede Tabelle und jede Spalte, was ein paar Vorteile hat:

  • Der Compiler kann die Konsistenz des Programmcodes durch Typprüfungen prüfen (ProductName in row("ProductName") ist nicht prüfbar, row.ProductName schon).
  • Die Syntax zur Adressierung von Tabellen und Spalten wird einfacher (row.ProductName ist einfacher als row("ProductName")).

IntelliSense zeigt alle definierten Tabellen und Spalten an.


Hinweis
Stark typisierte DataSets basieren auf einem konkreten Ausschnitt eines Datenbankschemas, der am einfachsten durch eine konkrete Datenbankabfrage festgelegt wird. Ein allgemeiner Datentyp »typisiertes DataSet« existiert nicht.


Wenn Sie ein typisiertes DataSet erzeugen, werden auch automatisch TableAdapter angelegt. Hierbei handelt es sich um typisierte DataAdapter, über die Sie eine DataTable mit Daten aus der Datenbank füllen und die Aktualisierungen wieder zurückschreiben können.


Hinweis
Da das typisierte DataSet im Quelltext vorliegt, können Sie dort Anpassungen und Ergänzungen jeglicher Art vornehmen.



Rheinwerk Computing - Zum Seitenanfang

28.1 Erzeugung Zur nächsten ÜberschriftZur vorigen Überschrift

Es bieten sich zwei Wege an, um ein stark typisiertes DataSet zu erzeugen:

  • mit dem Designer von Visual Studio
  • mit dem Kommandozeilenprogramm XSD.exe

Rheinwerk Computing - Zum Seitenanfang

28.1.1 Visual Studio Designer Zur nächsten ÜberschriftZur vorigen Überschrift

Das typisierte DataSet soll die beiden Tabellen Products und Categories beschreiben. Aus der Tabelle Products interessieren uns dabei die Spalten ProductID, CategoryID, ProductName und UnitPrice, aus Categories die Spalten CategoryID und CategoryName.

Nachdem Sie ein neues Projekt angelegt haben, fügen Sie über den Projektmappen-Explorer ein neues Element hinzu. Markieren Sie dazu den Knoten des Projekts im Projektmappen-Explorer, öffnen Sie dessen Kontextmenü, und wählen Sie Neues Element hinzufügen. Im sich öffnenden Dialogfenster wählen Sie die Vorlage DataSet aus und geben dem Element einen Namen (siehe Abbildung 28.1).

Abbildung 28.1 Typisiertes DataSet hinzufügen

Im Designer wird nun ein leeres Fenster angezeigt, dem die gewünschten Tabellen hinzugefügt werden müssen. Dazu setzen wir den Server-Explorer ein, dem wir die benötigte Datenbankverbindung zuvor noch hinzufügen müssen. Sollten Sie das Fenster des Server-Explorers nicht sehen, können Sie es über das Menü Ansicht öffnen.

Ganz oben im Server-Explorer sehen Sie den Knoten Data Connactions (siehe Abbildung 28.2). Markieren Sie diesen Knoten, und öffnen Sie über dessen Kontextmenü den Dialog Verbindung hinzufügen. Passen Sie gegebenenfalls die Datenquelle über die Schaltfläche Ändern an, zum Beispiel Microsoft SQL Server (SqlClient).

Geben Sie nun den Servernamen an – für einen Server auf der lokalen Maschine alternativ ein Punkt (.) oder »(local)« (einschließlich der runden Klammern). Wenn Sie die Northwind-Datenbank in einer benannten Instanz von SQL Server installiert haben, beispielsweise SQLExpress, dann geben Sie den Instanzbezeichner von SQL Server getrennt durch ein »\«-Zeichen hinter dem Rechnernamen an, zum Beispiel »(local)\SQLExpress«.

Voreingestellt ist die Authentifizierung mit der Windows-Anmeldung. Für die SQL Server-Anmeldung müssen Sie Benutzername und Kennwort eintragen. Dazu muss der SQL Server diese Art der Anmeldung unterstützen. Wählen Sie zum Schluss noch die gewünschte Datenbank aus, testen Sie die Verbindung über die Schaltfläche Testverbindung, und bestätigen Sie die Einstellungen mit OK. Danach wird die Datenbankverbindung im Server-Explorer angezeigt. Wenn Sie deren Knoten erweitern, werden alle Elemente der Northwind-Datenbank angezeigt (Tabellen, Ansichten, Typen usw.).

Abbildung 28.2 Server-Explorer

Wenn Sie aus dem Server-Explorer eine Tabelle in den Designer des typisierten DataSets ziehen, werden alle Spalten der Tabelle übernommen. Um nur einen Teil der Spalten hinzuzufügen, öffnen wir den Knoten der Tabelle und markieren die gewünschten Spalten – halten Sie dabei die Taste Strg -Taste gedrückt. Ziehen Sie nun die markierten Spalten in den Designer. Das Resultat sollte dann so aussehen wie in Abbildung 28.3.

Abbildung 28.3 Typisiertes DataSet im Designer

Das war bereits alles. Die Abbildung zeigt, dass der Designer automatisch die Beziehung zwischen den Tabellen hinzufügt.

AlleDateienAnzeigen.tifIm Projektmappen-Explorer sehen Sie die Schemadatei NWDataSet.xsd für das typisierte DataSet. Der Datei sind die drei Dateien NWDataSet.Designer.vb, NWDataSet.xsc und NWDataSet.xss untergeordnet. Sie werden angezeigt, wenn Sie sich alle Dateien im Projektmappen-Explorer anzeigen lassen – klicken Sie dazu auf die Symbolleistenschaltfläche im Projektmappen-Explorer. Mit der vb-Datei werden wir uns noch beschäftigen, die beiden anderen werden vom Designer benötigt.


Rheinwerk Computing - Zum Seitenanfang

28.1.2 Das Kommandozeilentool XSD.exe topZur vorigen Überschrift

Aufwendiger ist der Weg über das Kommandozeilentool xsd.exe, auf dem der Designer aufbaut. Sollte der Designer einmal aus irgend einem Grund unpassend sein, können Sie das Tool direkt verwenden. Dazu brauchen Sie ein nicht typisiertes DataSet, in dem alle Schemainformationen enthalten sind. Damit auch die DataRelation zwischen den Tabellen Products und Categories richtig erkannt wird, müssen wir die Beziehung mittels Code beschreiben. Alle anderen Metadaten besorgen wir uns über die Methode FillSchema. Zum Schluss rufen wir die Methode WriteXmlSchema des DataSets auf und schreiben die Schemainformationen in eine XSD-Datei (im Beispiel in das Verzeichnis, in dem die Applikation gespeichert ist).


'...\ADO\DataSetTypisiert\XSDexe.vb

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

      cmd.CommandText = "SELECT ProductID, ProductName, " & _ 
        "CategoryID, UnitPrice FROM Products" 
      da.SelectCommand = cmd 
      da.FillSchema(ds, SchemaType.Source, "Products")

      cmd.CommandText = "SELECT CategoryID, CategoryName From Categories" 
      da.SelectCommand = cmd 
      da.FillSchema(ds, SchemaType.Source, "Categories")

      Dim colDetail As DataColumn = ds.Tables(0).Columns("CategoryID") 
      Dim colMaster As DataColumn = ds.Tables(1).Columns("CategoryID") 
      Dim rel As DataRelation = _ 
        New DataRelation("KategorieProdukte", colMaster, colDetail) 
      ds.Relations.Add(rel) 
      Dim dir As String = My.Application.Info.DirectoryPath 
      Dim file As String = System.IO.Path.Combine(dir, "WriteXmlSchema.xsd") 
      ds.WriteXmlSchema(file) 
      Console.WriteLine("Datei {0} geschrieben", file) 
      Console.ReadLine() 
    End Sub 
  End Module 
End Namespace

Hinweis
Wird das Schema mit der zweiparametrigen Variante da.FillSchema(ds, SchemaType.Source) ermittelt, haben die Tabellen die Standardnamen Table und Table1.


Das Tool xsd.exe finden Sie im Ordner \bin Ihrer Visual Studio-Installation. Mit ihm erzeugen wir die gleiche .vb-Datei, wie sie der Designer erstellt. Über StartAlle ProgrammeMicrosoft Visual Studio 2008Visual Studio ToolsVisual Studio 2008-Eingabeaufforderung öffnen Sie eine Konsole mit angepasstem Suchpfad, sodass Sie nicht den vollen Pfad zu xsd.exe angeben müssen. Darin rufen Sie das Tool auf und übergeben ihm im ersten Parameter die zuvor erzeugte Schemadatei. Dem zweiten Parameter übergeben Sie /dataset, der dritte ist nötig, wenn die generierte Datei in der »falschen« Programmiersprache erzeugt wird.

xsd.exe WriteXmlSchema.xsd /dataset /language:vb

Damit ist eine Klassendatei für das typisierte DataSet erzeugt worden, die Sie nun in andere Projekte einfügen und nutzen können. Sollten Sie in Windows Presentation Framework- oder Windows Workflow-Projekten auf die Daten zugreifen, sorgt die Option /enableDataBinding für eine flexiblere Verwendung. Falls Sie die Formulierung von Abfragen der Daten mit LINQ bevorzugen, sollten Sie die Option /enableLinqDataSet einsetzen. Durch Eingabe von xsd.exe ohne Parameter erhalten Sie eine Liste aller möglichen Optionen. Trotz der vielen Parameter habe ich xsd nicht zur Generierung eines TableAdapters bewegen können.


Hinweis
Sollten Sie noch mehr Kontrolle über die Generierung benötigen, lohnt ein Blick in die Klassen, auf die sich xsd.exe stützt: System.Xml.Serialization.XmlSchemaImporter und System.Xml.Serialization.XmlCodeExporter. Lassen Sie sich nicht von der mageren Dokumentation abschrecken, die die Klassen als »intern« brandmarkt. Alternativ gibt es andere Schema-Compiler, zum Beispiel http://dingo.sourceforge.net.




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