Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

Die Seite wird erstellt Sibylle-Hortensia Specht
 
WEITER LESEN
Kapitel 2

       Ihre erste ADO.NET-Anwendung
       mit Microsoft Visual Studio 2005
       erstellen

          In diesem Kapitel:
          Jeder weiß eine Demo zu schätzen                                                    50
          Das Datenzugriffsformular ohne Code erstellen                                       51
          Fragen, die häufiger gestellt werden sollten                                        76

                                                                                                   49

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
50                                        Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Viele Bücher für Entwickler konzentrieren sich auf Codefragmente, die auf mehrere Kapitel verteilt sind,
  ehe sie dann am Ende des Buchs zu einer einfachen funktionierenden Anwendung zusammengesetzt
  werden. Anstatt diesem Standardverfahren zu folgen, zeigt Ihnen dieses Kapitel, wie Sie eine schnelle und
  einfache Anwendung erstellen, die einige Hauptfeatures von Microsoft ADO.NET veranschaulicht.

  Jeder weiß eine Demo zu schätzen
  Wie die Entwicklerkonferenzen, an denen ich teilgenommen und bei denen ich Vorträge gehalten habe,
  gezeigt haben, weiß jeder eine gute Demo zu schätzen. Es ist so viel einfacher, Features zu erörtern und sich
  Code anzusehen, wenn Sie diesen Code erst einmal in Aktion gesehen haben. Also werde ich diese Erörte-
  rung mit einer Demo beginnen.

  Der DataForm-Assistent wurde verworfen
  In der ersten Ausgabe dieses Buchs wurde der DataForm-Assistent von Visual Studio 2002 eingesetzt, um in
  wenigen Schritten ein datengebundenes Formular zu erstellen. Dieser Assistent hat Sie durch die einzelnen
  Schritte geführt und Informationen von Ihnen abgefragt. Anhand dieser Angaben hat der Assistent dann ein
  neues Formular erzeugt und Steuerelemente, andere Komponenten sowie eine ganze Menge Code in das
  Formular hinzugefügt. Das Ganze ist Geschichte, weil der Assistent nicht mehr erforderlich ist.
  Die Datenzugriffsfeatures der Visual Studio-Entwicklungsumgebung wurden in Visual Studio 2005 kom-
  plett überarbeitet. Jetzt können Sie einfache Datenzugriffsanwendungen erstellen, ohne Code zu schreiben
  und ohne den DataForm-Assistenten zu verwenden. Dieses Kapitel führt Sie durch die erforderlichen
  Schritte, um eine einfache Datenzugriffsanwendung zu erstellen, mit der Sie Daten aus einer Datenbank
  abrufen, anzeigen und modifizieren sowie die Änderungen in die Datenbank zurückschreiben können.
  Dabei erläutere ich einige Objekte und Konzepte, die beim Erstellen dieser kleinen Anwendung eine Rolle
  spielen. Außerdem lernen Sie den Code kennen, den Visual Studio automatisch generiert. Die Beispielan-
  wendung dient auch als Vorschau auf viele Objekte, Features und Konzepte, die in späteren Kapiteln behan-
  delt werden.

   HINWEIS       Viele Entwickler hassen Assistenten. Nun ja, vielleicht ist hassen ein zu starkes Wort, aber Entwickler vertrauen
  den Assistenten häufig nicht, vor allem solchen, die eine »Black Box-Technologie« verwenden. Zwar hat der DataForm-Assistent
  ein neues Formular erzeugt, doch konnten Sie den Assistenten nicht erneut ausführen, um weitere Datenspalten oder eine
  zusätzliche Tabelle mit Informationen in das vom Assistenten bereits generierte Formular einzufügen. Der Assistent zum
  Konfigurieren von Datenquellen, den Sie in Kürze kennen lernen, lässt auch iterative Programmierung zu.

  Dieses Kapitel konzentriert sich auf die Entwurfszeit-Datenzugriffsfeatures, die für Microsoft Windows
  Forms-Anwendungen – kurz WinForms – existieren. Außerdem gibt es Entwurfszeit-Datenzugriffsfeatures
  für Webanwendungen. Das sind leistungsfähige Instrumente, mit denen sich Webanwendungen wesentlich
  einfacher als in vorherigen Versionen von Microsoft Visual Studio erstellen lassen. Ich konzentriere mich
  hier auf die WinForms-Features, weil sich daran die Schichten in den Designern und dem von ihnen gene-
  rierten Code leichter darstellen lassen. Dieser Ansatz eignet sich am besten, um in ADO.NET einzusteigen.
  Dieses Kapitel soll Ihnen dabei helfen, eine einfache Anwendung mit der Northwind-Beispieldatenbank zu
  erstellen. Produkte wie Microsoft SQL Server und die meisten Versionen von Microsoft Access enthalten

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                           51

 diese Datenbank. Die Struktur der Northwind-Datenbank kann von einem Produkt oder einer Version zur
 nächsten leicht variieren, aber sie enthält immer Tabellen wie Customers, Orders, Products und Employees.
 In diesem Buch gehe ich davon aus, dass Sie Zugriff auf eine Northwind-Datenbank haben. Die verschiede-
 nen Editionen von Microsoft SQL Server 2005 enthalten diese Beispieldatenbank nicht mehr. Der Kasten
 »SQL Server für das Volk! (Neuauflage)« beschreibt Code, mit dem Sie die Northwind-Datenbank als SQL
 Server 2005- und SQL Server Express-Datenbanken erstellen können. Außerdem erläutert dieser Kasten,
 weshalb die Northwind-Datenbank und nicht die erst kürzlich als Beispieldatenbank für SQL Server einge-
 führte AdventureWorks-Datenbank verwendet wird.

 Das Datenzugriffsformular ohne Code erstellen
 Sie erstellen nun eine einfache Windows-Anwendung, mit der Sie auf Daten in einer Datenbank zugreifen
 können.

 Das neue Projekt erstellen
 Starten Sie Visual Studio und legen Sie über Datei | Neu | Projekt ein neues Projekt an. Wählen Sie im Dia-
 logfeld gemäß Abbildung 2.1 eine neue Windows-Anwendung. Das Projekt für dieses Kapitel trägt im
 Beispiel den Namen Chapter_02, doch können Sie den Namen frei festlegen.

 Abbildung 2.1 Ein neues Projekt für eine Windows-Anwendung erstellen

 Aufbauend auf diesem neuen Projekt setzen Sie nun die Entwurfszeit-Datenzugriffsfeatures von Visual
 Studio ein, um das Beispielprojekt zu komplettieren.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
52                                         Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Eine neue Datenquelle hinzufügen
  Im Visual Studio-Menü finden Sie einen Eintrag Daten. Er enthält ein Untermenü mit einem Menübefehl,
  um eine neue Datenquelle hinzuzufügen (siehe Abbildung 2.2).

  Abbildung 2.2 Eine neue Datenquelle über das Visual Studio 2005-Menü hinzufügen

  Mit Visual Studio 2005 können Sie schnell und einfach Klassen erzeugen, die Daten aus einer Datenbank,
  einem Web Service oder einer Auflistung von Objekten aufnehmen. Wenn Sie den Untermenübefehl Neue
  Datenquelle hinzufügen wählen, startet der Assistent zum Konfigurieren von Datenquellen. Mit diesem
  Assistenten erstellen Sie problemlos eine Klasse, die mehrere Tabellen aus Ihrer Datenbank speichert.
  Abbildung 2.3 zeigt den ersten Schritt des Assistenten mit der Frage, welchen Datenquellentyp Sie erzeugen
  möchten. Wählen Sie Datenbank und klicken Sie auf Weiter.

                                                                                        Abbildung 2.3 Eine Datenbank als
                                                                                        Datenquellentyp festlegen

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                                 53

 Ihre Verbindung wählen
 Nachdem Sie spezifiziert haben, dass Sie eine Datenquelle basierend auf einer Datenbank erstellen möchten,
 fragt der Assistent zum Konfigurieren von Datenquellen nach Informationen, wie Sie die Verbindung zu
 Ihrer Datenbank herstellen möchten (siehe Abbildung 2.4).

                                                                         Abbildung 2.4 Eine Verbindung wählen

 Haben Sie bereits Verbindungen zu Datenbanken von Visual Studio aus eingerichtet, werden diese Verbin-
 dungen im Dropdown-Menü, das Abbildung 2.4 zeigt, aufgelistet. Wenn Sie einen Eintrag in der Dropdown-
 Liste wählen, können Sie dann die Optionen im Dialogfeld verwenden, um die Verbindungszeichenfolge zu
 untersuchen (indem Sie auf die Schaltfläche mit dem Pluszeichen klicken) und vertrauliche Daten wie zum
 Beispiel Kennwortinformationen aus der Verbindungszeichenfolge auszuschließen.
 Um eine neue Verbindung zu erstellen, klicken Sie auf die Schaltfläche Neue Verbindung. Daraufhin er-
 scheint ein Dialogfeld, in dem Sie die Verbindung zur Datenbank näher spezifizieren. Bevor Sie sich mit
 diesem Dialogfeld und den verfügbaren Optionen beschäftigen, sollten Sie sich erst im Kasten »SQL Server
 für das Volk! (Neuauflage)« einen kurzen Überblick über die neue Edition von Microsoft SQL Server
 verschaffen.

  SQL Server für das Volk! (Neuauflage)
  Mit der Freigabe von SQL Server 2005 hat Microsoft eine neue Edition von SQL Server herausgebracht:
  SQL Server Express, ein lizenzgebührenfreies, verteilbares Datenbankpaket (Redistributable Package).
  Diese Geschichte dürfte Ihnen bekannt vorkommen und auch eine Kolumne innerhalb des Kastens ver-
  dienen. Sicherlich ist Ihnen bekannt, dass Microsoft ein Produkt mit ähnlichen Zielen und Features na-
  mens Microsoft Desktop Engine 2000 (MSDE) veröffentlicht hat. In der ersten Ausgabe dieses Buchs war
  dieser Kasten unter der Überschrift »SQL Server für das Volk!« dann auch der MSDE gewidmet.         

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
54                                 Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

   Leider gab es gewisse Probleme mit der MSDE 2000 – sie enthielt keine Tool-Unterstützung und einige
   Entwickler schienen ihre Beschränkungen im Vergleich zur Standard-Edition zu kennen. Es gab
   Newsgroups, in denen massenhaft Entwickler Fragen stellten, wie oder ob Abfragen in MSDE-Szenarios
   gedrosselt würden. Und die meisten »Antworten« waren falsch, einschließlich meiner eigenen.
   Das SQL Server-Team hat intensiv an diesen Problemen gearbeitet. Auf der SQL Server Express-Site
   finden Sie klare Richtlinien, die zeigen, wie sich diese neue Edition von ihren verwandten Editionen –
   Workgroup, Standard und Enterprise – unterscheidet. Wenn Sie bereits die SQL Server 2005-Tools (SQL
   Server Management Studio) installiert haben, können Sie damit auf Ihre SQL Server Express-Datenbank
   zugreifen. Andernfalls können Sie SQL Server Management Studio Express von der SQL Server Express-
   Site herunterladen. Weitere Informationen finden Sie auf der SQL Server Express-Site unter
   http://www.microsoft.com/sql/editions/express/default.mspx.
   Wie Microsoft Access-Datenbanken ist SQL Server Express ein lizenzgebührenfreies, verteilbares Daten-
   bankpaket. Allerdings ist es im Unterschied zu Access-Datenbanken und dem Jet-Datenbankmodul ein
   echtes Client-Server-Datenbanksystem genau wie SQL Server. Die Datenbankdateien, die Sie für eine SQL
   Server Express-Datenbank verwenden, eignen sich auch für andere SQL Server-Versionen. Wie andere
   SQL Server-Editionen unterstützt SQL Server Express sowohl Standard- als auch integrierte Sicherheit. Es
   bietet viele Features von anderen SQL Server-Editionen, weil es dasselbe Datenbankmodul enthält. Im
   Ergebnis können Sie eine für SQL Server Express konzipierte Anwendung mit nur minimalem Aufwand
   auf die Editionen Workgroup, Standard oder Enterprise übertragen.
   Zwischen SQL Server Express und anderen Editionen sind einige wichtige Unterschiede zu beachten. SQL
   Server Express bietet nicht so viele High-End-Features, wie sie in anderen Editionen verfügbar sind. SQL
   Server Express unterstützt Datenbanken bis zu einer Größe von 4 GB, während andere Editionen mit
   größeren Datenbanken umgehen können. Außerdem beherrscht es weder Datenbankpartitionierung noch
   Versand von Sicherungsprotokollen, Failover-Clusterung, Volltextsuche und andere Features, die mit den
   höher angesiedelten Editionen von SQL Server verbunden sind.
   Die das ganze Buch hindurch verwendeten Verbindungs- und Abfragezeichenfolgen sind für die Kommu-
   nikation mit der lokalen Instanz von SQL Server 2005 Express ausgelegt und gehen davon aus, dass Sie die
   Beispieldatenbanken Northwind und pubs installiert haben. Diese Datenbanken gehören zwar nicht mehr
   zum Standardlieferumfang, lassen sich aber mit SQL Server Management Studio (bzw. der Express-
   Edition) leicht installieren. Die Installationsskripts für diese Datenbanken (InstNwind.sql für Northwind
   und InstPubs.sql für pubs) sind im .NET 2.0 SDK, das zum Lieferumfang von Visual Studio 2005 gehört,
   enthalten und im Verzeichnis C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Samples\Setup
   untergebracht. Öffnen Sie diese Dateien in SQL Server Management Studio (oder der Express-Edition),
   wie in Abbildung 2.5 gezeigt, und klicken Sie auf die Schaltfläche Ausführen.                          

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                                            55

  Abbildung 2.5 Installieren der Beispieldatenbank Northwind mithilfe von Microsoft SQL Server Management Studio Express
  Diese und andere Skripts können Sie auch per Code mithilfe von SQL Management Objects (SMO) aus-
  führen. Dieses neue Objektmodell erlaubt es, dass Sie die Struktur von SQL Server programmgesteuert
  ansprechen und modifizieren können. Der nachfolgende Beispielcode zeigt, wie Sie mit SMO Skripts
  ausführen, um die Beispieldatenbanken Northwind und pubs zu installieren und dann eine Liste der ver-
  fügbaren Datenbanken, Tabellen und Anmeldungen auszugeben. Weitere Informationen zu SMO finden
  Sie in der SQL Server-Onlinedokumentation.
  Der Code geht davon aus, dass Sie Verweise auf die Assemblys Microsoft.SqlServer.Smo und Micro-
  soft.SqlServer.ConnectionInfo haben. Der Code ist auch unter der Annahme geschrieben, dass Sie die
  jeweilige Konstruktion für Ihre Sprache verwenden (Imports für Microsoft Visual Basic und using für
  Microsoft Visual C#), um auf die Klassen in den Namespaces System, System.IO und Micro-
  soft.SqlServer.Management.Smo zuzugreifen.
  Visual Basic
  Dim server As New Server(".\SQLExpress")
  Dim dbMaster As Database = server.Databases("Master")
  Dim strScriptDir As String
  strScriptDir = "C:\Program Files\Microsoft Visual Studio 8\" & _
                 "SDK\v2.0\Samples\Setup\"                                                                                 

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
56                                 Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

   If Not server.Databases.Contains("Northwind") Then
       Console.WriteLine("Creating Northwind database...")
       Dim rdr As New StreamReader(strScriptDir & "instnwnd.sql")
       dbMaster.ExecuteNonQuery(rdr.ReadToEnd())
   End If
   If Not server.Databases.Contains("pubs") Then
       Console.WriteLine("Creating pubs database...")
       Dim rdr As New StreamReader(strScriptDir & "instpubs.sql")
       dbMaster.ExecuteNonQuery(rdr.ReadToEnd())
   End If

   Console.WriteLine("Databases")
   For Each db As Database In server.Databases
       Console.WriteLine(" {0}", db.Name)
       For Each tbl As Table In db.Tables
           Console.WriteLine("    {0}", tbl.Name)
       Next tbl
       Console.WriteLine()
   Next db
   Visual C#
   Server server = new Server(@".\SQLExpress");
   Database dbMaster = server.Databases["Master"];
   string strScriptDir;
   strScriptDir = @"C:\Program Files\Microsoft Visual Studio 8\" +
                  @"SDK\v2.0\Samples\Setup\";

   if (!server.Databases.Contains("Northwind"))
   {
       Console.WriteLine("Creating Northwind database...");
       StreamReader rdr = new StreamReader(strScriptDir +
                                           "instnwnd.sql");
       dbMaster.ExecuteNonQuery(rdr.ReadToEnd());
   }

   if (!server.Databases.Contains("pubs"))
   {
       Console.WriteLine("Creating pubs database...");
       StreamReader rdr = new StreamReader(strScriptDir +
                                           "instpubs.sql");
       dbMaster.ExecuteNonQuery(rdr.ReadToEnd());
   }

   Console.WriteLine("Databases");
   foreach (Database db in server.Databases)
   {                                                                                                               

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                          57

       Console.WriteLine(" {0}", db.Name);
       foreach (Table tbl in db.Tables)
           Console.WriteLine("    {0}", tbl.Name);
       Console.WriteLine();
  }
  Der Beispielcode in diesem Buch greift weiterhin auf die Standardbeispieldatenbank Northwind zurück,
  die zum Lieferumfang von SQL Server 2000 und 7.0 sowie den meisten Versionen von Microsoft Access
  gehörte. SQL Server 2005 enthält diese Datenbank und auch die alte pubs-Datenbank nicht mehr, obwohl
  die Skripts zum Erstellen dieser Datenbanken allgemein verfügbar sind. Diese Skripts können Sie in SQL
  Server Management Studio für SQL Server 2005 oder SQL Express Manager für SQL Express laden und
  ausführen. Außerdem lässt sich das obige Codefragment nutzen.
  Die in verschiedenen Editionen von SQL Server 2005 und 2000 enthaltene Beispieldatenbank Adventure-
  Works demonstriert eindrucksvoll, wie sich Daten partitionieren und normalisieren lassen, wobei die
  Anzahl der Zeilen schon an echte Datenbankszenarios heranreicht. Allerdings kamen die meisten Ent-
  wickler, mit denen ich gesprochen habe, nicht ganz klar mit diesem Schema. Zum Beispiel verlangt das
  Abrufen von Kundennamen und Adressen eine Verknüpfung über drei Tabellen. Die in diesem Buch
  vorgestellten Codefragmente sollten aber konzeptionell leicht zu verstehen sein. Aus diesem Grund ver-
  wendet dieses Buch die Beispieldatenbank mit dem einfacheren Schema – Northwind.
  Eine letzte Anmerkung in Bezug auf SQL Server Express- und Access-Datenbanken ist angebracht. Viele
  Benutzer fragen: »Warum sollte ich meine Anwendung erstellen, um mit SQL Server-Datenbanken zu
  kommunizieren? Ich hatte niemals Probleme mit Access-Datenbanken in der Vergangenheit.« Verstehen
  Sie mich nicht falsch. Access-Datenbanken sind großartig. Sie sind einfach, kompakt und leicht mit An-
  wendungen verteilbar. Allerdings handelt es sich nicht um echte Client-Server-Datenbanken und sie sind
  für viele Anwendungen nicht geeignet. Zum Beispiel ist das Jet-Modul, mit dem man auf den Inhalt einer
  Access-Datenbank zugreift und ihn modifiziert, nicht threadsicher. Es sei dringend davor gewarnt, eine
  Access-Datenbank als Datenspeicher für eine ASP.NET- oder Mehrschicht-Anwendung einzusetzen.
  Einfach ausgedrückt wurde das Jet-Modul für eine kleinere Anzahl von gleichzeitigen Benutzern konzi-
  piert und ist nicht für den Umgang mit größeren mehrschichtigen Multithreadanwendungen ausgelegt.
  Wenn zum Beispiel mehrere Benutzer Änderungen an derselben Access-Datenbank vornehmen, haben sie
  jeder eine Kopie des Jet-Moduls geladen. Alle fragen dieselbe .mdb-Datei ab, modifizieren sie und schrei-
  ben außerdem in eine .ldb-Datei, um zu verfolgen, welcher Benutzer welche Datensätze gesperrt hat. Das
  Jet-Modul kann das Schreiben von Änderungen in die eigentliche Datenbankdatei aufschieben und die
  Änderungen lokal zwischenspeichern. Das Aufschieben der Schreibvorgänge verbessert das Leistungsver-
  halten für die Benutzer, die Änderungen vornehmen. Der Nebeneffekt für dieses Verhalten ist, dass es eine
  Verzögerung gibt, bevor die Änderungen für andere Benutzer sichtbar sind. Das kann problematisch sein
  in Anwendungen, wo viele Benutzer versuchen, auf dieselben Daten zuzugreifen und sie zu modifizieren.
  Mit anderen Worten sollten Sie niemals ein Flugreservierungssystem mithilfe einer Access-Datenbank
  aufbauen.
  Echte Client-Server-Datenbanksysteme wie SQL Server und Oracle verfolgen einen anderen Ansatz.        

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
58                                       Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

   Anstatt jede Anwendung eine Kopie des Datenbankmoduls laden zu lassen und dann diese Module zu
   zwingen, irgendwie den Zugriff auf die Datenbankdateien zu synchronisieren, ist die Datenbank über
   einen zentralisierten Dienst zugänglich, der die gesamte Kommunikation auf verschiedenen Verbindun-
   gen verwaltet. Der Dienst greift dann auf die Datendateien zu und modifiziert sie. Sofern es die verwende-
   ten Transaktionen nicht anderweitig vorschreiben, sind Änderungen, die auf einer Verbindung
   vorgenommen werden, unmittelbar für alle Verbindungen verfügbar. Das ist zwar eine grobe Vereinfa-
   chung eines Client-Server-Datenbanksystems, doch für diejenigen, die an dateibasierte Datenbanken wie
   Microsoft Access, Microsoft Visual FoxPro usw. gewohnt sind, ist dies ein guter Ausgangspunkt.
   Die meisten Client-Server-Datenbanken unterstützen zudem auch gespeicherte Prozeduren, sodass man
   zusätzlichen Code bei eintreffenden Änderungen ausführen kann, um Regeln der Gültigkeitsprüfung
   durchzusetzen oder andere Aktionen zu unternehmen, wie zum Beispiel eine Mail an die Einkaufsabtei-
   lung zu senden, wenn durch die Bestellung eines Produkts die Anzahl der am Lager vorhandenen Artikel
   unter eine bestimmte Grenze fällt. Gespeicherte Prozeduren bieten Ihnen einen zentralen Platz für derar-
   tige Logik. Sie sind also nicht gezwungen, diese Logik in allen Anwendungen zu realisieren, die mit Ihren
   Daten interagieren.

  Mit der Datenbank verbinden
    HINWEIS       Bei den Beispielen in diesem Buch wird davon ausgegangen, dass Sie mit einer lokalen Installation von SQL
  Server Express arbeiten und die Beispieldatenbank Northwind installiert haben. Der Kasten »SQL Server für das Volk! (Neuauf-
  lage)« erläutert, wie Sie die Northwind-Beispieldatenbank installieren.

  Wenn Visual Studio das erste Mal von Ihnen Verbindungsinformationen abfragt, erscheint ein Dialogfeld
  wie in Abbildung 2.6, in dem Sie den Typ der zu verwendenden Datenbank festlegen. Standardmäßig gibt
  das Dialogfeld eine Microsoft SQL Server-Datenbank an, stellt aber auch andere Optionen bereit, beispiels-
  weise eine Microsoft SQL Server-Datenbankdatei, eine Microsoft Access Datenbankdatei, eine Oracle-
  Datenbank usw.
  Nachdem Sie den Typ der zu verwendenden Datenbank gewählt haben, können Sie diesen Datenbanktyp als
  Standard festlegen. Bevor Sie auf OK klicken, sollten Sie noch das Kontrollkästchen Immer diese Auswahl
  verwenden aktivieren, um zu verhindern, dass dieses Dialogfeld erneut erscheint. Aber auch wenn Sie diese
  Option wählen, können Sie später zu diesem Dialogfeld zurückkehren und einen anderen Datenbanktyp
  wählen. Nachdem Sie auf OK geklickt haben, öffnet Visual Studio ein Dialogfeld, das spezielle Informatio-
  nen über den ausgewählten Datenbanktyp abfragt. Wir gehen hier davon aus, dass Sie sich mit einer SQL
  Server-Datenbank verbinden.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                                      59

                                                                              Abbildung 2.6 Den Typ der zu verwen-
                                                                              denden Datenbank festlegen

 Wenn Sie festgelegt haben, dass Sie sich mit einer SQL Server-Datenbank verbinden, gelangen Sie zum
 Dialogfeld, das Abbildung 2.7 zeigt. Dieses Dialogfeld fragt Informationen über den Standort der SQL
 Server-Datenbank, die Anmeldeinformationen für die Verbindung zur Datenbank und den anfangs zu
 verwendenden Katalog ab. Um anzuzeigen, dass Sie sich mit SQL Server Express, der auf dem lokalen
 Computer läuft, verbinden, geben Sie .\SQLExpress als Servername im Dialogfeld ein. Der Punkt dient als
 Shortcut, um den lokalen Computer zu bezeichnen. Es ist auch möglich, den eigentlichen Computernamen
 oder den Shortcut »(local)« einzugeben, doch verlangt der Punkt weniger Tipparbeit und beansprucht in
 Codeausschnitten weniger Platz. Der Backslash (»\«) trennt den Computernamen vom Namen der SQL
 Server-Instanz. Und der Name der SQL Server Express-Instanz lautet »SQLExpress«.

                                                  Abbildung 2.7 Mit der lokalen Instanz von SQL Server Express
                                                  verbinden

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
60                                  Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Das Dialogfeld geht davon aus, dass Sie sich zur SQL Server-Datenbank per Windows-Authentifizierung
  verbinden. Standardmäßig verwenden die Installationen von SQL Server 2005 die gleiche Standardeinstel-
  lung – Benutzer müssen sich dabei mit ihren Windows-Anmeldeinformationen verbinden, anstatt einen
  Benutzernamen und ein Kennwort anzugeben. Wenn Sie sich mit der zweiten Option, die man auch als SQL
  Server-Authentifizierung bezeichnet – anmelden möchten, wählen Sie die Option SQL Server-Authentifizierung
  verwenden und geben einen Benutzernamen und ein Kennwort an.
  Das Dialogfeld enthält auch eine Dropdown-Liste von verfügbaren Katalogen für den Server. Um sich mit
  der Northwind-Datenbank zu verbinden, wählen Sie Northwind in der Dropdown-Liste aus. Sie könnten
  auch die Option Datenbankdatei anhängen wählen, um Ihre eigene Datenbankdatei bereitzustellen.
  Für die Verbindung zu SQL Server stehen noch viele andere Optionen bereit. Über die Schaltfläche Erwei-
  tert gelangen Sie zu zusätzlichen Eigenschaftseinstellungen für die Verbindung – beispielsweise Paketgröße,
  Verbindungspooling usw. Abbildung 2.8 zeigt das Dialogfeld mit den erweiterten Optionen. Über die
  Schaltfläche Testverbindung versucht das Dialogfeld, mit den bereitgestellten Informationen eine Verbin-
  dung zur Datenbank herzustellen.

                                           Abbildung 2.8 Erweiterte Verbindungsoptionen

  Nachdem Sie die Informationen für die Verbindung zu Ihrer Datenbank bereitgestellt haben, klicken Sie auf
  OK, um die Verbindungsinformationen im Dialogfeld zu übernehmen. Klicken Sie dann im Assistenten zur
  Konfiguration von Datenquellen auf Weiter, um zur nächsten Option zu gelangen.

  Was hat das alles mit ADO.NET zu tun?
  Alle diese Verbindungsinformationen werden in eine einzelne Zeichenfolge – die so genannte Verbindungs-
  zeichenfolge – transformiert, die Schlüsselwörter und Werte kombiniert und durch Semikolons trennt. Zum
  Beispiel werden die in Abbildung 2.7 gezeigten Informationen in die folgende Verbindungszeichenfolge
  übertragen:

   Data Source=.\SQLExpress;Initial Catalog=Northwind;
   Integrated Security=True;

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                           61

 Die Visual Studio-Dialogfelder verwenden ADO.NET-Klassen, um diese Verbindungszeichenfolge zu
 erstellen. Das in Abbildung 2.8 gezeigte Dialogfeld verwendet die Klasse SqlConnectionStringBuilder. Diese
 Klasse ist neu in ADO.NET 2.0 und hilft dabei, Verbindungszeichenfolgen zu generieren. Insbesondere ist
 diese Klasse dafür ausgelegt, Verbindungszeichenfolgen für SQL Server zu generieren. Die Schaltfläche Test
 erzeugt ein neues SqlConnection-Objekt, das mit der von SqlConnectionStringBuilder generierten Verbin-
 dungszeichenfolge versucht, die Verbindung zu Ihrer Datenbank herzustellen. Auf diese Klassen geht Kapi
 tel 3 ausführlicher ein.
 Die Klassen SqlConnection und SqlConnectionStringBuilder gehören zu einem Satz von Klassen, die speziell
 für die Kommunikation mit SQL Server ausgelegt sind. Diese Klassen befinden sich im Namespace Sys-
 tem.Data.SqlClient und man bezeichnet diesen Satz von Klassen oft auch als SQL Client .NET-
 Datenprovider oder SqlClient. Der Oberbegriff für einen Satz von ADO.NET-Klassen, die für die Kommu-
 nikation mit einer bestimmten Datenbank oder einer Komponente vorgesehen sind, lautet .NET-
 Datenprovider. Version 2.0 des .NET Frameworks enthält auch .NET-Datenprovider, die der Kommunikati-
 on mit Oracle-Datenbanken dienen, sowie OLE DB-Provider und ODBC-Treiber. Anhang A untersucht, wie
 man diese .NET-Datenprovider einsetzt und wie sie sich von SqlClient unterscheiden.

 Zu anderen Typen von Datenbanken verbinden
 Visual Studio verlangt nicht, dass Sie mit einer SQL Server-Datenbank arbeiten. Wenn Sie sich mit einem
 anderen Typ von Datenbank verbinden möchten, können Sie auf die Schaltfläche Ändern klicken (siehe
 Abbildung 2.7), die das bereits in Abbildung 2.6 gezeigte Dialogfeld aufruft. Visual Studio bringt speziali-
 sierte Dialogfelder für Verbindungsinformationen mit, um mit SQL Server-, Access-, Oracle- und ODBC-
 Datenquellen zu interagieren. Wenn Sie eine dieser Optionen wählen, startet Visual Studio das jeweilige
 Dialogfeld für den entsprechenden Datenquellentyp.
 Die in Abbildung 2.6 dargestellten Optionen werden grob in die verschiedenen .NET-Datenprovider über-
 setzt, die in Version 2.0 des .NET Frameworks eingebunden sind. Allerdings ist Microsoft nicht die einzige
 Firma, die .NET Datenprovider erstellt hat, um mit Datenbanken zu kommunizieren, die ADO.NET ver-
 wenden. Zum Beispiel haben sowohl Oracle als auch IBM ihre eigenen .NET Datenprovider produziert, um
 mit ihren Datenbanken zu kommunizieren. Es gibt eine ganze Gemeinde von Drittherstellern, die derartige
 Komponenten anbieten. Auch wenn es eine Fülle von Drittherstellern von .NET-Datenprovidern für Version
 1.1 des .NET Frameworks gibt, werden derzeit (Mitte 2006) keine Nicht-Microsoft .NET Datenprovider für
 die Version 2.0 des .NET Frameworks angeboten.
 Wenn Sie einen .NET-Datenprovider für Version 2.0 des .NET Frameworks von einem Dritthersteller
 installiert haben und Sie damit die Verbindung zu Ihrer Datenbank herstellen möchten, markieren Sie
  in der Liste der Datenquellen, die in Abbildung 2.6 zu sehen ist, wählen dann den gewünschten
 .NET-Datenprovider aus der Dropdown-Liste und klicken auf OK.

 Die Verbindungszeichenfolge speichern
 Nachdem Sie Ihre Verbindungsinformationen spezifiziert haben, fragt der Assistent zum Konfigurieren von
 Datenquellen mit dem in Abbildung 2.9 wiedergegebenen Dialogfeld, ob Sie die Verbindungszeichenfolge in
 der Konfigurationsdatei der Anwendung speichern möchten. Auch wenn es für diesen Ansatz viele Pro und
 Kontra gibt, besteht ein entscheidender Vorteil darin, dass sich die Verbindungsinformationen auf diese
 Weise ganz einfach vom übrigen Code trennen lassen.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
62                                 Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

                                                                                Abbildung 2.9 Die Verbindungszeichen-
                                                                                folge in der Konfigurationsdatei einer
                                                                                Anwendung speichern

  Ganz allgemein ist es nicht zu empfehlen, die Verbindungszeichenfolge in die Anwendung zu kompilieren.
  Der Standort der Datenbank kann sich ändern, nachdem Sie Ihre Anwendung bereitgestellt haben. Indem
  Sie die Verbindungszeichenfolge in einer Ressource ablegen, die extern zu Ihrem Anwendungscode ist, wird
  Ihre Anwendung flexibler.
  Wenn Sie die Option Ja, Verbindung speichern unter im Dialogfeld aktiviert lassen, speichert Visual Studio
  die Verbindungszeichenfolge und den von Ihnen bereitgestellten Namen in der Anwendungskonfigurati-
  onsdatei für Ihr Projekt. Visual Studio fügt auch die Logik in den Code Ihres Projekts hinzu, um die Verbin-
  dungszeichenfolge für die Kommunikation mit Ihrer Datenbank abzurufen.
  Anwendungskonfigurationsdateien verkörpern das Standardverfahren, um Informationen für Verbindungs-
  zeichenfolgen zu speichern. Die Klassen in der Version 2.0 des .NET Frameworks, die Sie dabei unterstüt-
  zen, die Konfigurationsdateien zu erstellen und darauf zuzugreifen, umfassen Features, die speziell auf
  Verbindungszeichenfolgen ausgelegt sind. Weitere Informationen zu Konfigurationsdateien im Allgemeinen
  finden Sie in der Dokumentation zum .NET Framework SDK. Wir beschäftigen uns mit dem Einsatz von
  Konfigurationsdateien zur Speicherung von Verbindungszeichenfolgen ausführlich am Ende von Kapitel 3.

  Tabellen und Spalten für die Anzeige auswählen
  Nachdem Sie festgelegt haben, ob Sie Ihre Verbindungszeichenfolge in der Anwendungskonfigurationsdatei
  für das Projekt speichern oder nicht, zeigt der Assistent zum Konfigurieren von Datenquellen alle verfügba-
  ren Tabellen, Sichten, gespeicherten Prozeduren und Funktionen Ihrer Datenbank im Dialogfeld an (siehe
  Abbildung 2.10). Hier können Sie komplette Strukturen auswählen oder auch nur bestimmte Spalten aus
  Tabellen und Sichten festlegen, die Sie in Ihre neue Datenquelle einbinden möchten.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                                 63

                                                                  Abbildung 2.10 Tabellen und Spalten aus der
                                                                  Datenbank abrufen

 Wählen Sie die Spalten CustomerID, CompanyName und ContactName aus der Tabelle Customers aus,
 indem Sie den Knoten von Customers – wie in Abbildung 2.10 gezeigt – erweitern, und wählen Sie die
 Spalten OrderID, CustomerID, EmployeeID und OrderDate aus der Tabelle Orders aus. Mit diesen Spalten
 können wir eine einfache Datenzugriffsanwendung aufbauen und daran nützliche Features von ADO.NET
 sowie hilfreiche Entwurfszeit-Datenzugriffs-Features von Visual Studio demonstrieren.
 Im unteren Teil des Dialogfelds gibt es eine Option, mit der Sie einen Namen für das DataSet festlegen
 können. Standardmäßig verwendet Visual Studio den Namen der Datenbank, mit der Sie sich verbinden (in
 unserem Beispiel Northwind) und fügt »DataSet« an diesen Namen an. Den Namen können Sie ohne
 Weiteres ändern, doch für dieses Beispiel übernehmen wir die Standardeinstellung.
 Klicken Sie nun auf Fertig stellen, um den Assistenten abzuschließen und die neue Datenquelle zu erstellen.

 Wie verhält sich das alles zu ADO.NET?
 Das in Abbildung 2.10 gezeigte Dialogfeld verwendet die Methode GetSchema der Klasse SqlConnection, um
 die Listen von verfügbaren Spalten, Tabellen, Sichten, gespeicherten Prozeduren und Funktionen abzurufen.
 Es gibt eine GetSchema-Methode in der Connection-Klasse für jeden .NET-Datenprovider in Version 2.0 des
 .NET Frameworks, wie es Anhang A erläutert. Die Methode GetSchema eignet sich hervorragend, um
 Informationen über das Schema Ihrer Datenbank abzurufen. Mehr dazu folgt in Kapitel 3.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
64                                  Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Was hat der Assistent zum Konfigurieren von Datenquellen erzeugt?
  Nachdem Sie nun den Assistenten zum Konfigurieren von Datenquellen beendet haben, wollen wir uns
  näher ansehen, was der Assistent in Ihr Projekt eingefügt hat.

  Ein neuer Projekteintrag
  Wenn Sie sich den Projektmappen-Explorer ansehen, finden Sie einen neuen Eintrag im Projekt. Ist das
  Fenster für die Projektmappe nicht sichtbar, wählen Sie im Visual Studio-Menü Ansicht den Befehl Projekt-
  mappen-Explorer. Der in Abbildung 2.11 gezeigte neue Projekteintrag enthält den Namen, den Sie im
  Dialogfeld gemäß Abbildung 2.10 spezifiziert haben, und die Definition einer Klasse, die man als »stark
  typisiertes DataSet« bezeichnet.

                                            Abbildung 2.11 Die neue stark typisierte DataSet-Klasse im Projektmappenfenster

  Bevor wir auf stark typisierte DataSets eingehen, wenden wir uns kurz der Standard-DataSet-Klasse zu. Die
  standardmäßige DataSet-Klasse enthält eine DataTables-Auflistung und eine DataRelations-Auflistung. Eine
  DataTable enthält Auflistungen von Datenzeilen und -spalten ähnlich einem Microsoft Office Excel-
  Tabellenblatt. Die Klasse DataRelation erlaubt es, Beziehungen zwischen DataTables herzustellen. Zum
  Beispiel könnten Sie separate DataTables von Kunden- (Customers) und Bestellinformationen (Orders)
  speichern und dann mit einer DataRelation die Bestellungen für einen bestimmten Kunden heraussuchen.
  Auf diese Klassen geht Kapitel 6 ausführlich ein.
  Ein stark typisiertes DataSet ist eine Klasse, die sich von einem Standard-DataSet ableitet und die Tabellen,
  Zeilen und Spalten der in diesem DataSet gespeicherten Daten über stark typisierte Eigenschaften zugäng-
  lich macht. Diese stark typisierten Eigenschaften erlauben es, Code wie den folgenden zu schreiben:

  Visual Basic

   Dim rowCustomer As NorthwindDataSet.CustomersRow
   rowCustomer = NorthwindDataSet.Customers(0)
   txtCompanyName.Text = rowCustomer.CompanyName

  Visual C#

   NorthwindDataSet.CustomersRow rowCustomer;
   rowCustomer = northwindDataSet.Customers[0];
   txtCompanyName.Text = rowCustomer.CompanyName;

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                             65

 Derartiger Code ist dem folgenden Code vorzuziehen:

 Visual Basic

  Dim rowCustomer As DataRow
  rowCustomer = StandardDataSet.Tables("Customers").Rows(0)
  txtCompanyName.Text = CStr(rowCustomer("CompanyName"))

 Visual C#

  DataRow rowCustomer;
  rowCustomer = standardDataSet.Tables["Customers"].Rows[0];
  txtCompanyName.Text = (string) rowCustomer["CompanyName"];

 Mit stark typisierten DataSets beschäftigt sich Kapitel 9 ausführlicher. Momentan genügt es zu wissen, dass
 es mit stark typisierten DataSets einfacher ist, Code zu schreiben, der auf den Inhalt eines DataSets zugreift
 und ihn modifiziert.

 Eine neue Verbindung im Server-Explorer
 Sehen Sie sich nun den Inhalt des Server-Explorers an. Sollte das Fenster nicht zu sehen sein, wählen Sie im
 Menü Ansicht von Visual Studio den Befehl Server-Explorer. Wie Abbildung 2.12 zeigt, enthält die Struktur-
 ansicht von Server-Explorer einen Eintrag, der der Verbindung entspricht, die Sie im Assistenten zum
 Konfigurieren von Datenquellen eingerichtet haben.
 Server-Explorer ist ein sehr hilfreiches Tool, mit dem sich – seinem Namen entsprechend – Server untersu-
 chen lassen. Die Features von Server-Explorer sind speziell darauf zugeschnitten, mit Datenbanken zu
 interagieren. Mit Server-Explorer ist es möglich, das Schema – wie zum Beispiel Tabellen, Sichten und
 gespeicherte Prozeduren – in einer Datenbank zu untersuchen. Außerdem können Sie in Server-Explorer
 durch Rechtsklicken mit der Maus ein Kontextmenü öffnen. Hier finden Sie Optionen, um eine neue Abfra-
 ge zu erstellen oder die Daten in einer Tabelle oder Sicht anzuzeigen.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
66                                 Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

                                        Abbildung 2.12 Die neue Verbindung ist im Server-Explorer verfügbar

  Eine neue Datenquelle
  Sehen wir uns nun den Inhalt des Datenquellenfensters an, um die Struktur der mit dem Assistenten ange-
  legten Datenquelle zu untersuchen. Ist das Datenquellenfenster nicht sichtbar (oder können Sie es nicht
  finden), wählen Sie im Menü von Visual Studio Daten und dann Datenquellen anzeigen. Im Datenquellen-
  fenster sehen Sie die Datenquelle, die Sie mit dem Assistenten erstellt haben. Wenn Sie die einzelnen Knoten
  in der Strukturansicht erweitern, sieht das Datenquellenfenster wie in Abbildung 2.13 aus.

                                        Abbildung 2.13 Die Struktur der neuen Datenquelle im Datenquellenfenster
                                        untersuchen

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                                67

 Die Struktur zeigt die Knoten für die ausgewählten Tabellen (Customers und Orders) und darunter jeweils
 die ausgewählten Spalten. Außerdem ist festzustellen, dass es zwei verschiedene Orders-Knoten gibt – ein
 Knoten ist dem NorthwindDataSet-Knoten untergeordnet und ein Knoten gehört zum Customers-Knoten.
 In Kürze erfahren Sie, wie sich diese beiden Knoten unterscheiden.
 Sehen wir uns nun an, wie Sie die neue Datenquelle verwenden können.

 Die Datenquelle verwenden, um Elemente in das Formular einzufügen
 Im Datenquellenfenster können Sie nicht nur die Struktur Ihrer Datenquelle untersuchen. Es ist auch
 möglich, Elemente in einen Designer einzufügen.

 Das erste Element auf das Formular einfügen
 Markieren Sie den Knoten CustomerID, der direkt unter dem Knoten Customers in der Datenquelle er-
 scheint, und ziehen Sie dieses Element auf das Formular etwas unterhalb und rechts von der linken oberen
 Ecke des Formulars. Visual Studio fügt daraufhin eine Reihe von Elementen in das Formular ein. Das
 Ergebnis entspricht Abbildung 2.14.

                                                                  Abbildung 2.14 Das Ergebnis, nachdem der
                                                                  Knoten CustomerID auf das Formular gezogen
                                                                  wurde

 Sehen wir uns nun die verschiedenen Elemente an, die Visual Studio dem Formular hinzugefügt hat.

 Die Steuerelemente Label und TextBox
 Visual Studio hat ein Label und eine TextBox in das Formular eingefügt und die Eigenschaften dieser Steu-
 erelemente basierend auf dem Element festgelegt, das Sie auf das Formular gezogen haben. Die Text-
 Eigenschaft des Label-Steuerelements ergibt sich aus dem Namen der Spalte – CustomerID. Visual Studio
 analysiert den Spaltennamen und nimmt an, dass die Änderungen in der Groß-/Kleinschreibung bedeuten,
 dass »Customer« und »ID« getrennt werden sollen. Außerdem legt Visual Studio Eigenschaften für das

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
68                                 Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  TextBox-Steuerelement fest, sodass die TextBox die Werte aus der Spalte CustomerID anzeigt, wenn Sie das
  Projekt ausführen.
  Die Name-Eigenschaft der beiden Steuerelemente beruht ebenfalls auf dem Element, das Sie auf das Formu-
  lar gezogen haben, auch wenn die tatsächlichen Werte von der gewählten Sprache abhängen. Visual Studio
  folgt dem gebräuchlichen Muster für die verschiedenen Sprachen. Deshalb wird die Name-Eigenschaft des
  Label-Steuerelements auf »customerIDLabel« gesetzt, wenn Sie mit Visual C# arbeiten, und auf »Custo-
  merIDLabel«, wenn Sie Visual Basic einsetzen.
  Weitere Informationen, wie Sie mit Steuerelementen in der Art von TextBox auf Ihre Daten zugreifen, finden
  Sie in Kapitel 13.

  Navigationssteuerelement
  Weiterhin ist zu sehen, dass Visual Studio ein Navigationssteuerelement am oberen Rand des Formulars
  eingefügt hat. Hierbei handelt es sich um ein BindingNavigator-Steuerelement. Diese Klasse ist neu in
  Windows Forms der Version 2.0 des .NET Frameworks. Über das BindingNavigator-Steuerelement kann der
  Benutzer zur Laufzeit die Datensätze im Resultset gezielt ansteuern. Außerdem verfügt das Steuerelement
  über Schaltflächen, mit denen sich Einträge im Resultset einfügen bzw. daraus entfernen und anstehende
  Änderungen in die zugrunde liegende Datenbank übernehmen lassen.
  Visual Studio bildet die Name-Eigenschaft des BindingNavigator-Steuerelements aus dem Namen der
  Tabelle in der Datenquelle (»Customers«) und »BindingNavigator«. Wie bei den Steuerelementen Label und
  TextBox entspricht der erste Buchstabe der Name-Eigenschaft des BindingNavigator-Steuerelements der
  Groß-/Kleinschreibung, wie sie bei der von Ihnen gewählten Sprache üblich ist.
  Unterhalb des Formulars finden Sie ein sogenanntes Komponentenfach. Hier ist eine weitere Darstellung des
  BindingNavigator-Steuerelements zusammen mit einigen anderen Elementen zu sehen.
  Weitere Informationen zur Klasse BindingNavigator für den Datenzugriff finden Sie in Kapitel 13.

  Stark typisiertes DataSet
  Im Komponentenfach ist ein Element namens NorthwindDataSet bzw. northwindDataSet (je nach gewählter
  Sprache) zu sehen. Dieses Element ist eine Instanz des stark typisierten DataSets, auf das wir weiter vorn
  kurz eingegangen sind. Es nimmt Kunden- und Bestellinformationen auf, die aus der Datenbank abgerufen
  werden.
  Weitere Informationen zur Verwendung von stark typisierten DataSets enthält Kapitel 9.

  BindingSource
  Weiterhin ist im Komponentenfach ein Element CustomerBindingSource bzw. customerBindingSource (je
  nach gewählter Sprache) enthalten. Dieses Element ist eine Instanz der BindingSource-Klasse, die ebenfalls
  in Version 2.0 des .NET Frameworks neu hinzugekommen ist. Die Klasse BindingSource ist dafür vorgese-
  hen, sowohl mit einer Datenquelle – wie zum Beispiel dem stark typisierten DataSet – als auch mit einem
  Datenkonsumenten – wie zum Beispiel der TextBox für die Spalte CustomerID – zu interagieren. Diese neue
  Klasse ist deshalb nützlich, weil Sie damit Steuerelemente an die BindingSource binden und dann die Bin-
  dingSource unterschiedlichen Datenquellen zuordnen können, ohne die Eigenschaften der gebundenen
  Steuerelemente zu ändern – ein Szenario, das häufig vorkommt, wenn Sie Daten von einem Web Service
  abrufen.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                         69

 Weitere Informationen zur Klasse BindingSource für den Datenzugriff finden Sie in Kapitel 13.

 TableAdapter
 Im Komponentenfach ist noch ein Element enthalten: CustomersTableAdapter oder customersTableAdapter
 (je nach gewählter Sprache). Wie aus dem Namen hervorgeht, ist dieses Element ein TableAdapter – ein
 neues Feature von Visual Studio. Im .NET Framework gibt es keine TableAdapter-Klasse. Es handelt sich
 hier um eine reine Visual Studio-Schöpfung.
 Im ADO.NET-Objektmodell ist DataAdapter der generische Name für eine Klasse, die die Logik enthält, um
 Informationen von einer Datenbank abzurufen und später die anstehenden Änderungen zurück an die
 Datenbank zu senden. Ein TableAdapter ist einem DataAdapter ähnlich, ist aber dafür konzipiert, mit stark
 typisierten DataSet-Objekten zu interagieren.
 Mehr zur Verwendung von TableAdapter-Objekten finden Sie in Kapitel 9.

 Andere Elemente in das Formular einfügen
 Nachdem wir nun etwas näher die Elemente betrachtet haben, die durch Ziehen des CustomerID-Elements
 vom Datenquellenfenster auf das Formular erzeugt wurden, fügen wir weitere Steuerelemente für andere
 Spalten in der Tabelle Customers hinzu. Ziehen Sie die Elemente CompanyName und ContactName auf das
 Formular und legen Sie sie unterhalb der Label- und TextBox-Steuerelemente für die Spalte CustomerID ab.
 Um das Formular optisch ansprechender zu gestalten, können Sie auch die Steuerelemente untereinander
 ausrichten und/oder die TextBox-Steuerelemente verbreitern, damit die TextBox-Steuerelemente breit genug
 sind, um die längsten Werte aus den Spalten CompanyName und ContactName vollständig anzuzeigen, doch
 ist das eigentlich nicht wirklich notwendig.

 Das Projekt ausführen
 Das Formular besitzt nun genügend Elemente und Funktionalität, um dem Benutzer die Interaktion mit
 Kundendaten zu ermöglichen. Es ist also an der Zeit, das Projekt auszuführen und zu sehen, was passiert.
 Erstellen und starten Sie das Projekt über F5 oder die Schaltfläche Debuggen starten auf der Standardsym-
 bolleiste. Sie können das Projekt auch über das Menü Debuggen und den Befehl Debuggen starten erstellen
 und ausführen. Daraufhin sollten Sie ein Formular sehen, das dem in Abbildung 2.15 entspricht.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
70                                  Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

                                                    Abbildung 2.15 Die ausgeführte Beispielanwendung

  Kundendaten erscheinen
  Wenn das Formular auf dem Bildschirm erscheint, sind bereits Kundeninformationen zu sehen. Die Text-
  Box-Steuerelemente enthalten Werte für die Spalten CustomerID, CompanyName und ContactName. Das
  BindingNavigator-Steuerelement zeigt Informationen darüber an, welcher Kundeneintrag auf dem Formu-
  lar erscheint. Die Tabelle Customers in der SQL Server-Beispieldatenbank Northwind umfasst anfangs
  91 Zeilen.

  Durch die verfügbaren Kunden navigieren
  Mit dem BindingNavigator-Steuerelement können Sie durch die vorhandenen Kunden navigieren. Um zum
  nächsten Kunden zu gehen, klicken Sie auf die Schaltfläche mit dem Größer-als-Symbol (>). Zum letzten
  Kunden gelangen Sie über die Schaltfläche, deren Symbol wie »>|« aussieht. Mit den beiden ersten Schaltflä-
  chen können Sie zum ersten Kunden (|
Das Datenzugriffsformular ohne Code erstellen                                                         71

 führen Sie das Projekt erneut aus. Die vorgenommenen Änderungen sollten jetzt auf dem Formular zu
 sehen sein.

  Hilfe! Ich kann die Änderungen nicht sehen!
  Abhängig davon, wie Sie die Verbindung zu Ihrer Datenbank hergestellt haben, können Sie eventuell die
  übermittelten Änderungen nicht sehen. Das heißt nun aber nicht, dass Ihr Projekt die Änderungen nicht
  erfolgreich gespeichert hat.
  Wenn Sie eine Access-Datenbankdatei (*.mdb) oder eine SQL Server-Datenbankdatei (*.mdf) in Ihrem
  Projekt verwenden, kann Visual Studio diese Dateien in das Verzeichnis mit der ausführbaren Projektdatei
  kopieren. Wenn Visual Studio Ihre Datenbankdatei beim nächsten Erstellen Ihres Projekts überschreibt,
  gehen die Änderungen verloren, die Sie in der Beispielanwendung an den Kundendaten vorgenommen
  haben. Um zu ermitteln, wie oder ob Visual Studio die Datenbankdatei in das Verzeichnis mit der aus-
  führbaren Projektdatei kopiert hat, markieren Sie den Eintrag im Projektmappen-Explorer und sehen sich
  im Eigenschaftenfenster den Eintrag In Ausgabeverzeichnis kopieren an.
  Obwohl das Kopieren von Datenbankdateien ein beabsichtigtes Feature ist, hat das letztlich zu einiger
  Verwirrung und Frustration bei vielen Benutzern geführt. Weitere Informationen finden Sie im Blog des
  Visual Studio-Teams unter http://blogs.msdn.com/smartclientdata/archive/2005/08/26/456886.aspx.

 Verknüpfte Daten in das Formular einfügen
 Wir wollen nun den Gebrauchswert der Beispielanwendung etwas erhöhen und dazu Bestellinformationen
 auf das Formular einfügen. Der Benutzer soll Bestellinformationen für den momentan sichtbaren Kunden
 anzeigen und modifizieren können.

 Bestellungen auf das Formular ziehen
 Markieren Sie im Datenquellenfenster den Knoten Orders, der dem Knoten Customers untergeordnet ist.
 Ziehen Sie diesen Knoten auf das Formular unter die Label- und TextBox-Steuerelemente, die bereits auf
 dem Formular vorhanden sind. Das Ergebnis sollte wie in Abbildung 2.16 aussehen.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
72                                        Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Abbildung 2.16 Das Ergebnis nachdem der untergeordnete Knoten Orders auf das Formular gezogen wurde

  Was wurde hinzugefügt?
  Auf dem Formular fällt sofort das Raster auf, das Spalten für die Informationen aus der Tabelle Orders
  enthält. Dieses Raster ist eine Instanz des DataGridView-Steuerelements, das neu in der Version 2.0 des
  .NET Frameworks ist. Das Steuerelement ist dafür vorgesehen, mehrere Datenzeilen gleichzeitig anzuzeigen
  und dem Benutzer zu ermöglichen, Zeilen schnell und einfach bearbeiten, hinzufügen und löschen zu
  können.
  Im Komponentenfach finden Sie außerdem einen neuen TableAdapter und eine neue BindingSource, die
  beide für die Interaktion mit der Orders-Tabelle ausgelegt sind.

  Das Projekt erneut ausführen
  Führen Sie das Projekt aus. Das neue DataGridView-Steuerelement zeigt lediglich die Bestellinformationen
  für den momentan angezeigten Benutzer an. Wenn Sie mit dem BindingNavigation-Steuerelement einen
  anderen Kunden anzeigen, bleibt der Inhalt des DataGridView synchronisiert und zeigt die Bestellungen für
  den neu gewählten Kunden an.

  Bestellungen modifizieren
  Modifizieren Sie jetzt einige Bestellungen und versuchen Sie, diese Änderungen zu übernehmen. Damit Sie
  sich leichter davon überzeugen können, ob diese Änderungen in der Datenbank gespeichert wurden, modi-
  fizieren Sie Bestelldaten für den ersten verfügbaren Kunden. Verwenden Sie das BindingNavigation-
  Steuerelement, um den ersten Kunden anzuzeigen.

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Das Datenzugriffsformular ohne Code erstellen                                                           73

 Ändern Sie im DataGridView-Steuerelement den Inhalt einer Spalte. Lassen Sie aber die Spalten OrderID
 oder CustomerID unverändert, da diese besondere Aufgaben haben – die Spalte OrderID ist die Schlüssel-
 spalte in der Orders-Tabelle und die Spalte CustomerID dient dazu, die Zeile in der Orders-Tabelle mit einer
 Zeile in der Customers-Tabelle zu verknüpfen. Modifizieren Sie also eine der anderen Spalten, entweder
 EmployeeID oder OrderDate. Klicken Sie nun auf die Schaltfläche Daten speichern, schließen Sie das Formu-
 lar und führen Sie das Projekt erneut aus, um festzustellen, ob die vorgenommenen Änderungen in der
 Datenbank gespeichert wurden.
 Wenn Sie das Projekt erneut starten, werden Sie feststellen, dass die Änderungen nicht in die Datenbank
 übernommen wurden. Warum das so ist, erläutern wir später in diesem Kapitel.

 Den von Visual Studio generierten Code untersuchen
 Wir haben uns die Steuerelemente angesehen, die Visual Studio in das Formular und das Komponentenfach
 eingefügt hat. Jetzt ist es an der Zeit, kurz auf den Code einzugehen, den Visual Studio hinzugefügt hat.
 Zeigen Sie den Designer für das Formular an, wählen Sie Ansicht und dann Code aus dem Visual Studio-
 Menü. Sie können auch mit der rechten Maustaste auf den Designer des Formulars oder den Formularkno-
 ten im Projektmappen-Explorer klicken und Code anzeigen aus dem Kontextmenü wählen. Die Abbildun-
 gen 2.17 und 2.18 zeigen den Code, den Visual Studio für Visual Basic bzw. Visual C# generiert hat.

 Abbildung 2.17 Von Visual Studio für Visual Basic generierter Code

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
74                                          Kapitel 2: Ihre erste ADO.NET-Anwendung mit Microsoft Visual Studio 2005 erstellen

  Abbildung 2.18 Von Visual Studio für Visual C# generierter Code

  Das Load-Ereignis
  Anhand des Codes im Load-Ereignis des Formulars lässt sich erläutern, warum das Formular automatisch
  Kunden- und Bestellinformationen anzeigt, wenn das Formular erscheint. Wenn Sie den Code in Visual
  Studio oder in den Abbildungen 2.17 und 2.18 studieren, erkennen Sie, dass der Code für das Load-Ereignis
  des Formulars die Fill-Methode auf den TableAdapter-Objekten für die Tabellen Orders und Customers
  aufruft.
  Die Methode Fill führt die Abfrage aus, die im TableAdapter-Objekt gespeichert ist, und legt die Ergebnisse
  im Abschnitt des bereitgestellten DataSet ab. Der Code verwendet das stark typisierte DataSet in beiden Fill-
  Ereignissen, verweist aber auf die Orders- oder Customers-Eigenschaft auf dem stark typisierten DataSet, je
  nachdem, von welchem TableAdapter-Objekt die Fill-Methode aufgerufen wird. Dank dieses Codes sind die
  Kunden- und Bestellinformationen im stark typisierten DataSet des Formulars verfügbar, wenn das Formu-
  lar erscheint, und können in den TextBox- und DataGridView-Steuerelementen angezeigt werden.

  Das Click-Ereignis für SaveItem
  Im Click-Ereignis für die SaveItem-Schaltfläche (»Daten speichern«) auf dem BindingNavigator für Kunden-
  informationen sind drei Codezeilen enthalten. Die erste Zeile ruft die Validate-Methode auf dem Formular
  auf. Die Steuerelemente haben dadurch die Möglichkeit, die vom Benutzer eingegebenen Daten auf Gültig-
  keit zu prüfen. Die zweite Codezeile ruft die Methode EndEdit des BindingSource-Objekts für Kundenin-
  formationen auf und weist damit die Steuerelemente, die an diese BindingSource gebunden sind, an, alle
  ausstehenden Änderungen in die Datenquelle zu schreiben. Ohne diese Codezeile könnten die Änderungen

David Sceppa: Microsoft ADO.NET 2.0 - Das Entwicklerbuch. Microsoft Press 2006 (ISBN 978-3-86063-541-4)
Sie können auch lesen