25
Walter Doberenz, Thomas Gewinnus Datenbankprogrammierung mit Visual Basic 2010

Walter Doberenz, Thomas Gewinnus · Kurzübersicht Vorwort •. 31 1 Erste Schritte 35 2 Einführung in LINQ 83 3 SQL in Theorie und Praxis 121 4 Einführung ADO.NET 213 5 Das DataSet-Objekt

Embed Size (px)

Citation preview

Walter Doberenz, Thomas Gewinnus

Datenbankprogrammierung mit Visual Basic 2010

Kurzübersicht

Vorwort •. 31

1 Erste Schritte 35

2 Einführung in LINQ 83

3 SQL in Theorie und Praxis 121

4 Einführung ADO.NET 213

5 Das DataSet-Objekt im Detail 305

6 Windows Forms-Datenbindung 389

7 Datenbindung - WPF 471

8 Datenbindung in ASP.NET-Anwendungen 513

9 Die Microsoft Chart-Controls 639

10 Reporting Services 671

11 Crystal Reports -....'. 747

12 Access-Datenbanken 813

13 Microsoft SQL Server-Einstieg 891

14 Microsoft SQL Server-Programmierung 949

15 SQL Server Compact 1049

16 SQLite-Ein Mini ganz groß 1085

17 LINQ to SQL 1109

18 Arbeiten mit dem Entity Framework 1159

19 WCF - eine Einführung 1247

20 Einführung WCF Data Services 1293

21 Komplexbeispiel Webshop 1327

Stichwortverzeichnis 1399

Inhaltsverzeichnis

Die Bonuskapitel 3,11 und 21 finden Sie als PDF-Datei auf der beiliegenden CD. Im Inhaltsverzeichnis sind sie

durch ein CD-Symbol gekennzeichnet.

Vorwort 31

Erste Schritte 35Unsere Werkstatt 36

Betriebssystem 36Internet Information Server 36Visual Studio 2010 39SQL Server 2008 oder SQL Server Express 39Microsoft Access 40

Visual Basic und die Datenbankprogrammierung 40Zur Geschichte des universellen Datenzugriffs 41Merkmale webbasierter Anwendungen 42Ein Wort zum .NET-Sicherheitskonzept 45

Was ist neu in .NET 4.0/Visual Studio 2010? 46Die verschiedenen Pakete 46Die Visual Basic-Entwicklungsumgebung 46Neuheiten im Framework 4.0 47VB 2010: Sprache und Compiler 48

Ein wenig Datenbanktheorie 49Normalisieren von Tabellen 50Verknüpfen von Tabellen 54Weitere wichtige Begriffe 58

Einführungsbeispiele ~ 601.1 ... auf eine lokale Access-Datenbank zugreifen? 601.2 ... mit dem Microsoft SQL Server arbeiten? 641.3 ... eine einfache LINQ to SQL-Anwendung schreiben? 661.4 ... eine einfache ASP.NET-Webanwendung erstellen? 691.5 ... meine erste WPF-Anwendung entwickeln? 751.6 ... einen einfachen WCF-Dienst entwickeln? 78

Einführung in LINQ 83Die LINQ-Philosophie 84

OOP-Modell versus relationales Modell 84Besonderheiten beim ORM , 85Ein erstes LINQ-Beispiel 86Der Weg zu LINQ 88

Die neuen Sprachfeatures 91Typinferenz 91Nullable-Typen 93Objekt-Initialisierer 94

Inhaltsverzeichnis

Anonyme Typen 95Erweiterungsmethoden 96Lambda-Ausdrücke 97

Abfragen mit LINQ to Objects 100Grundlegende Syntax 100Übersicht der wichtigsten Abfrageoperatoren 102Die Projektionsoperatoren Select und SelectMany 104Der Restriktionsoperator Where 106Die Sortierungsoperatoren OrderBy und ThenBy 106Der Gruppierungsoperator GroupBy 108Verknüpfen mit Join 109Aggregatoperatoren 110Verzögertes Ausführen von LINQ-Abfragen 112Konvertierungsmethoden 112Abfragen mit PLINQ 113

How-to-Beispiele 1162.1 ... LINQ-Abfragen verstehen? 1162.2 ... nichtgenerische Collections abfragen? 118

in Theorie und Praxis 121Einführung 122

SQL-Dialekte 122Kategorien von SQL-Anweisungen 123

Testprogramm und Beispieldatenbank 124Hinweise zur Bedienung 125Unsere Beispieldatenbank im Überblick 125Alternative Varianten für die SQL-Abfrage 126Bemerkungen 129

Daten abfragen 129Abfragen mit SELECT 129Alle Spalten auswählen 130Auswahl der Spalten -. ^ 131Filtern 132Beschränken der Ergebnismenge 138Eindeutige Records/doppelte Datensätze 140Tabellen verknüpfen 141Tabellen vereinigen 144Datensätze sortieren 145Datensätze gruppieren 146Unterabfragen 147

Daten manipulieren 152Einfügen einzelner Datensätze 152Einfügen von Abfragedaten 153Exportieren/Importieren von Abfragedaten 155Aktualisieren/Ändern 158Löschen 158

Erweiterte SQL-Funktionen 159Berechnete/Formatierte Spalten 160Berechnungsfunktionen 167

Inhaltsverzeichnis, _

NULL-Werte 169Datum und Zeit in SQL-Abfragen 170Datentypumwandlungen 176Kreuztabellenabfragen 177

Datenbankverwaltung mit SQL (DDL) 179Datenbanken 179Tabellen 180Indizes 181Tabellen/Indizes löschen oder verändern 183Sichten (Views) 184Nutzer- und Rechteverwaltung 186

Datenbankentwurf optimieren 189Indizes 189Abfrageoptimierung 190Weitere Möglichkeiten 191

SQL in der Visual Basic-Praxis 191Ausführen oder abfragen? 191Einfügen von Strings zur Laufzeit 193Datumseingabe 193Parameterübergabe 194

How-to-Beispiele 1973.1 ... nach einem INSERT das Zählerfeld abfragen? 1973.2 ... die Anzahl der Datensätze ermitteln? 1983.3 ... Datumsteile in SQL zur Suche nutzen? 1983.4 ... die Groß-/Kleinschreibung berücksichtigen? 199

- 3.5 ... WITH OWNERACCESS OPTION verwenden? 1993.6 ... Datensätze richtig verknüpfen? 2003.7 ... doppelte Datensätze aus einer Tabelle löschen? 2013.8 ... die IFF-Funktion ersetzen? 2023.9 ... ein einfaches SQL-Abfrageprogramm erstellen? 2033.10 ... Aggregatfunktionen auswerten? 2053.11 ... SQL-Injection verhindern? -: 2063.12 ... die Access 2007-Datenbankfeatures unterstützen? 210

Übersichten 211Die wichtigsten SQL-Befehle 211Unterschiede ANSI-SQL und Access-SQL 212

Einführung ADO.NET 213Die wichtigsten Klassen in ADO.NET 214

Klassenhierarchie 214Die Klassen der Datenprovider 215Klassen im DataSet 218Das Zusammenspiel der ADO.NET-Klassen 218

Das Connection-Objekt 219Allgemeiner Aufbau 219OleDbConnection 220SqlConnection 222Fehlerbehandlung beim Öffnen einer Verbindung 225Schließen einer Verbindung 226

1 0

Verbindungspooling , 227Transaktionen : 227Eigenschaften des Connection-Objekts 228Methoden des Connection-Objekts 230Ereignisse des Connection-Objekts 231Der ConnectionStringBuilder 232ConnectionString in den Anwendungseinstellungen speichern 233

Das Command-Objekt 234Erzeugen und Anwenden eines Command-Objekts 234Erzeugen mittels CreateCommand-Methode 235Eigenschaften des Command-Objekts 235Methoden des Command-Objekts 238Freigabe von Connection- und Command-Objekten 239

Parameter-Objekte 240Erzeugen und Anwenden eines Parameter-Objekts 240Eigenschaften des Parameter-Objekts 241

Das CommandBuilder-Objekt 243Erzeugen 243Anwenden 243Einsatzbeschränkungen 244Einige Regeln 244

' Optimistisches Konkurrenzmodell 245Das DataReader-Objekt 245

DataReader erzeugen 245Daten lesen 246Eigenschaften des DataReaders 247Methoden des DataReaders 247

Das DataAdapter-Objekt 247DataAdapter erzeugen 248Command-Eigenschaften 249Fill-Methode 249Update-Methode 250UpdateCommand und Parameter-Objekte 251InsertCommand und DeleteCommand 253MissingSchemaAction-Eigenschaft 256RowUpdating- und RowUpdated-Ereignis 256

Arbeiten mit Excel-Arbeitsmappen 258Zugriffsmöglichkeiten 258OLE DB-Connectionstring 259Zugriff auf Excel 2007/2010-Arbeitsmappen 260Neue Mappen erstellen 261Daten in ein Tabellenblatt eintragen 262Daten aktualisieren 263Daten auslesen 263Zugriff auf Tabellenbereiche 265OLE-Automation 266

Weitere Features des Datenzugriffs 268Auslesen von Datenbankschemas 269Providerfabriken 269

' Inhaltsverzeichnis

How-to-Beispiele 2704.1 ... wichtige ADO.NET-Objekte schnell kennen lernen? 2704.2 ... eine Aktionsabfrage ausführen? 2724.3 ... Daten direkt zur Datenbank hinzufügen oder löschen? 2744.4 ... eine Access-Auswahlabfrage ausführen? 2774.5 ... parametrierte Abfragen ausführen? ; 2804.6 ... die Datenbank aktualisieren? 2834.7 ... RowUpdating-/RowUpdated-Ereignisse verstehen? 2874.8 ... Schemainformationen von der Datenbank abrufen? 2904.9 ... einen Connectionstring verschlüsseln? 2934.10 ... eine klassische Datenzugriffsschicht entwickeln? 295

Übersichten 300Datentypen 300Connection-Objekt 300Command-Objekt 301Parameter-Objekt 302DataReader-Objekt 302DataAdapter 303CommandBuilder 304

5 Das DataSet-Objekt im Detail 305Einführung 306

Das Objektmodell 306Methoden zum Erzeugen eines DataSets 308Weitere wichtige Methoden des DataSets 310Die XML-Fähigkeiten des DataSets 311

Das DataTable-Objekt 313DataTable erzeugen 313Spalten hinzufügen 314Berechnete Spalten 315Primärschlüssel ergänzen 316Einbinden von Constraints 317Hinzufügen von Relationen 319Zeilen zur DataTable hinzufügen 322Auf den Inhalt einer DataTable zugreifen 323Weitere Hinweise zum Bearbeiten von Zeilen 326Zeilen löschen 327Zeilenstatus und Zeilenversion , 328Ereignisse des DataTable-Objekts 331

Datenansichten mit Data View 332Erzeugen eines Data View 333Sortieren und Filtern von Datensätzen 333Suchen von Datensätzen 334Zeilenansicht mit DataRowView 335

Weitere DataSet-Features 336Umwandlungen zwischen DataSet und DataReader 336Binäre Serialisierung für DataSet/DataTable 338Die DataTable kann mehr XML 338Schnelles Laden von DataSets 338

Inhaltsverzeichnis

Typisierte DataSets 339Was ist ein typisiertes DataSet? 339Das Datenquellen-Konzept 341"Typisierte DataSets und TableAdapter 342

LINQ to DataSet 344Untypisierte DataSets abfragen 345Typisierte DataSets abfragen 346Abhängigkeiten zwischen den Tabellen auflösen 347

Die Qual der Wahl 349DataReader - der schnelle Lesezugriff 349DataSet - die Datenbank im Hauptspeicher 349Objektrelationales Mapping - die Zukunft? 350

How-to-Beispiele 3515.1 ... eine DataTable erzeugen und in einer Binärdatei speichern? 3515.2 ... eine DataTable in einer XML-Datei abspeichern? 3555.3 ... Master-Detailbeziehungen im DataGrid anzeigen? 3565.4 ... in einem Data View sortieren und filtern? 3585.5 ... nach Datensätzen suchen? 3595.6 ... vereinfacht nach Datensätzen suchen? 3625.7 ... zwischen DataTable und DataReader umwandeln? 364

-5.8 ... große Datenmengen in ein DataSet laden? 3665.9 ... ein DataSet binär serialisieren? 3685.10 ... ein DataSet in einen XML-String konvertieren? 3705.11 ... ein untypisiertes in ein typisiertes DataSet laden? 3755.12 ... ein typisiertes DataSet mit LINQ abfragen? 3795.13 ... mit LINQ to DataSet die Datenbank aktualisieren? 381

Übersichten 384DataSet 384DataTable 385DataColumn 386DataRow 387DataView 388

Windows Forms-Datenbindung 389Einführung 390

Manuelle Datenbindung an einfache Datenfelder 391Manuelle Datenbindung an Listen und Tabelleninhalte 394Entwurfszeit-Datenbindung an ein typisiertes DataSet 395

Drag & Drop-Datenbindung 396Navigieren im DataSet 397

Vor- und Rückwärtsblättern 397Hinzufügen und Löschen 397Aktualisieren und Abbrechen 397BindingNavigator 398

Die Anzeige formatieren 398Das DataGridView 399

Vom DataGrid zum DataGridView 399Grundlegende Datenbindung 400Standardmäßige Anzeige und Bedienung 401

Inhaltsverzeichnis

Wichtige Spalteneinstellungen 402Automatische Größenanpassungen .' 403Selektieren von Zellen 405Columns- und Rows-Auflistungen 406DataGridViewCellStyle-Objekte 407Spaltentypen 410Editieren im DataGridView 413Fehlerbehandlung 413Eingabeprüfung 414

How-to-Beispiele 4156.1 ... eine Objekt-Datenquelle verwenden? 4156.2 ... Steuerelemente an einen Objektbaum binden? 4186.3 ... Detailinformationen mit ListBox/ComboBox anzeigen? 4246.4 ... Steuerelemente manuell an ein DataSet binden? 4266.5 ... zwei Formulare an eine Datenquelle binden? 4326.6 ... mittels ComboBox zwei Tabellen verknüpfen? 4366.7 ... ein typisiertes DataSet manuell binden? 4406.8 ... l:n-Beziehungen per Drag & Drop-Datenbindung anzeigen? 4456.9 ... die Spalten im DataGridView formatieren? 447

, 6.10 ... mit DataReader und ListView arbeiten? 4506.11 ... Bilder aus der Datenbank anzeigen? 4536.12 ... BLOB-Daten verwalten? 4556.13 ... BLOB-Daten anzeigen? 4576.14 ... das DataGridView als Datenbank-Frontend verwenden? 4586.15 ... Datenbindung mit LINQ to SQL kennen lernen? 4646.16 ... den DataRepeater für die Anzeige verwenden? 468

Datenbindung-WPF 471Grundprinzip 472

Bindungsarten 473Wann wird eigentlich die Quelle aktualisiert? 474Bindung zur Laufzeit realisieren -..„ 475

Binden an Objekte 476Objekte im Code instanziieren 477Verwenden der Instanz im VB-Quellcode 478Anforderungen an die Quell-Klasse 479Instanziieren von Objekten per VB-Code 480

Binden von Collections 481Anforderung an die CoUection 481Einfache Anzeige 482Navigation zwischen den Objekten 483Einfache Anzeige in einer ListBox 484DataTemplates zur Anzeigeformatierung 485Mehr zu List- und ComboBox 486Verwendung der ListView 488

Ein Blick hinter die Kulissen 490Navigieren in den Daten 491Sortieren 492Filtern 492

1 4

Drag & Drop-Datenbindung 493Vorgehensweise 493Weitere Möglichkeiten 496

Formatieren von Werten 497IValueConverter 497BindingBase.StringFormat-Eigenschaft 499

Das DataGrid als Universalwerkzeug 500Grundlagen der Anzeige 500Vom Betrachten zum Editieren 504

How-to-Beispiele 5057.1 ... Datenbindung unter LINQ to SQL realisieren? 5057.2 ... Drag & Drop-Bindung für Master/Detail-Beziehungen umsetzen? 509

Datenbindung in ASP.NET-Anwendungen 513Übersicht Datenbindung unter ASP.NET 514

, Grundkonzept 515DataSource-Steuerelemente 515

SqlDataSource im Detail 516Datenauswahl mit Parametern 518Parameter für INSERT, UPDATE und DELETE 519FilterExpression 521Caching 522Weitere Methoden 522Ereignisse 523

Zugriff auf Geschäftsobjekte mit der ObjectDataSource 524Verbindung zwischen Objekt und DataSource 524Ein Beispiel sorgt für Klarheit 525Geschäftsobjekte in einer Session verwalten 529

Typisierte DataSets und ObjectDataSource 531Verwendung von TableAdaptern in ASP.NET-Seiten 531Datenauswahl und Anzeige mit TableAdaptern 532Datenmanipulation mit TableAdaptern 536ObjectDataSource und typisierte DataSets 538

LinqDataSource 542Bindung von einfachen LINQ-Coüections 543Binden eines LINQ to SQL-DataContext 545Berechnete Spalten/Detaildaten 546Eigene LINQ-Ausdrücke zur Laufzeit übergeben 548Filtern mit der LinqDataSource 548

EntityDataSource 550Entity Data Model erstellen 550EntityDataSource anbinden 553Datenmenge filtern 556

QueryExtender 556Grundlagen 557Suchen 558Sortieren 560

Weitere Datenquellen 561Spezialfall AccessDataSource 561

Inhaltsverzeichnis

Verwalten strukturierter Daten mit der XmlDataSource 561Das GridView-Steuerelement im Detail 562

Auswahlfunktion (Zeilenauswahl) 563Auswahl mit mehrspaltigem Index realisieren 564Hyperlink-Spalte für Detailansicht nutzen 564Spalten erzeugen/konfigurieren 565Template-Spalten verwenden 566Paging im GridView realisieren 570Editieren und Löschen im GridView 571Einfügen von Datensätzen 571Keine Daten, was tun? 572

Weitere Steuerelemente für die Datenbindung 572DetailsView 572Form View 575DataList 578Repeater 580ListView 582Label/TextBox 586CheckBoxList, BulletList, RadioButtonList, DropDownList, ListBox 587Hierarchische Datenanzeige mittels TreeView-Control 589Chart-Steuerelement 592

Eingabeprüfung mit den Validator-Steuerelementen 594Übersicht 594Wo findet die Fehlerprüfung statt? 594Verwendung 595RequiredFieldValidator 596CompareValidator 596RangeValidator 598RegularExpressionValidator 599CustomValidator 600ValidationSummary 602Weitere Möglichkeiten der Validation-Steuerelemente -. 603

Reports in ASP.NET-Anwendungen verwenden 603Der Microsoft ReportViewer 603Direkter Excel-/PDF-Export 605Parameterübergabe an lokale Reports 607

Weitere Themen 608Dynamic Data 608ASP.NET MVC 615AJAX 619

How-to-Beispiele 6228.1 ... die Zellen im GridView formatieren? 6228.2 ... ein GridView mit Scrollbar realisieren? 6248.3 ... ein GridView mit Mouseover-Effekt realisieren? 6248.4 ... GridView-Daten im Excel-Format exportieren? 6268.5 ... Detaildaten in einem Popup-Fenster anzeigen? 6298.6 ... eine Zeilensumme im GridView berechnen? 6328.7 ... reagieren, wenn keine Daten vorhanden sind? 6328.8 ... im GridView eine Spaltensummen berechnen? 633

Inhaltsverzeichnis

8.9 ... korrekte Währungswerte im GridView anzeigen? 6348.10 ... Eingabewerte im GridView validieren? 6358.11 ... einen E-Mail-Versand inASP.NET realisieren? 636

9 Die Microsoft Chart-Controls 639Allgemeine Chart-Features 640

Serien/Reihen und Datenpunkte direkt erzeugen 640Den Diagrammtyp ändern 6413D-Darstellung 644Farben für Serien und Datenpunkte 644Leere Datenpunkte 645Diagramm drucken 646Diagramm exportieren/abspeichern 646

Einführung in die Chart-Datenbindung 647Manuelle Datenbindung mittels Points.AddXY-Methode 647Übersicht über die speziellen Datenbindungsmethoden 649Unterstützte Datenquellen 650

Spezielle Chart-Datenbindungsmethoden 650Die DataBindTable Methode 650DataBind-Methode/DataSource-Eigenschaft 653Die DataBindCrossTable-Methode 654Die Points.DataBind-Methode 656Die Points.DataBind(X)Y-Methoden 657

How-to-Beispiele 6609.1 ... das Chart-Control zur Laufzeit mit Daten füllen? 6609.2 ... das Chart mit einer LINQ to SQL-Abfrage verbinden? 6629.3 ... mit ASP.NET ein Diagramm anzeigen? 664

10 Reporting Services 671Übersicht 672

Report Designer 672Report Viewer - 672

Einführungsbeispiele 673Der erste Bericht - so einfach geht das! 673Ein zweiter Bericht - weg mit dem Assistenten! 678

Unsere Werkzeuge zum Berichtsentwurf 683Oberfläche des Report-Designers 683Toolbox 683Bericht-Menü 685Berichtsdaten-Fenster 686Programmieren im Ausdrucks-Editor 688

Sortieren, Gruppieren und Filtern von Datensätzen 691Allgemeines 691Sortieren 693Gruppieren 693Filtern 695

Kreuztabellenberichte 696Einfache Matrix 696Zeilen- und Spaltensummen anzeigen 697

Inhaltsverzeichnis

Zusätzliche berechnete Spalten einfügen 698Matrix mit zwei Zeilengruppen 698Bilder anzeigen 699Ein Bild in den Bericht einbetten 700Bilder aus einer Datenbank 701Externe Bilder 701Hintergrundbilder 701

Diagramme darstellen 701Diagrammtypen 701Säulendiagramm 702Weitere Gruppen hinzufügen 704Weitere Diagramme 706

Parameter anwenden 707Parameterdefinition 707Einbau von Parametern in den Berichtsentwurf 708Parameterwerte an Bericht übergeben 709

Berichtsvariablen 710Master-Detail-Reports 711

Subreports 711Eingebettete Datenregionen 711

Noch mehr Reporting 712Hyperlink realisieren 712Verwenden von ReportViewer-Ereignissen 713

Hinzufügen von benutzerdefiniertem Code 715Variante 1: Eingebetteter Visual Basic Code 715Variante 2: Benutzerdefinierte Assembly 716

Ergänzungen zum ReportViewer 718Local Mode versus Server Mode 718RDL- versus RDLC-Format 718Übersicht Datenbindung 719

How-to-Beispiele 72110.1 ... einen Bericht mit dem Berichtsassistenten erstellen? 72110.2 ... einen Unterbericht verwenden? 72510.3 ... eine Rechnung anzeigen? 73110.4 ... das Drillthrough-Event behandeln? 73610.5 ... auf eine benutzerdefinierte Assembly zugreifen? 73910.6 ... das Messgerät zur Anzeige nutzen? 744

£rystal Reports 747bersicht 748

Installieren 748Ein Einsteigerbeispiel 749Der Report-Designer 755Der Reportaufbau 756Die Druckvorschau-Komponente 757

Wichtige Funktionen im Überblick 758Formelfelder 758Parameterfelder 759Gruppennamenfelder 760

18

Spezialfelder 760SQL-Ausdrucksfelder 761Laufende Summe-Felder 761Unterberichte 762Diagramme und Bilder 763Weitere Komponenten 763Das Ereignis-Modell 764

Reports entwerfen 765Verbindung zur Datenbank herstellen 765Sortieren und Gruppieren 768Verwenden von Parameterfeldern 772Berechnungen im Report 775Gestalten mit bedingter Formatierung 779Kreuztabellenberichte 781Unterberichte 784

Programmieren der Druckvorschau 787Der CrystalReportViewer im Überblick 787Wichtige Eigenschaften, Methoden und Ereignisse 787

Direkte Ausgabe auf dem Drucker 789Die Lizenz zum Drucken 789Druckerauswahl und Konfiguration 790Drucken mit Druckerdialog 791

Exportieren von Reports 792Bestimmen des Exportformats 792Export als Datei 793Export als E-Mail 794

Praxisbeispiel - Rechnung mit Crystal Report drucken 795Datenbasis anpassen 795Report erzeugen 797Festlegen der Datenquelle 797Berechnungen im Report durchführen 797Auswahl der gewünschten Datensätze ." 798Reportdesign 798Druckvorschaufenster entwerfen 800Zuweisen der Daten und Übergabe der Parameter 801Die fertige Rechnung 802

How-to-Beispiele 80311.1 ... ein Deckblatt erzeugen? 80311.2 ... Seitenzahlen, Druckdatum etc. einblenden? 80311.3 ... Spaltensatz oder Etiketten realisieren? 80311.4 ... die Seitenränder festlegen? 80411.5 ... mehrspaltige Reports erstellen? 80511.6 ... einen Seitenumbruch erzwingen? 80511.7 ... die Position und Größe der Druckvorschau vorgeben? 80611.8 ... Reports in die Applikation einbetten? 80611.9 ... Querdruck auswählen? 80611.10 ... RTF-/HTML-Text ausgeben? 80711.11 ... den Report zur Laufzeit auswählen? 80711.12 ... Summen, Anzahlen, Mittelwerte etc. berechnen? 808

11.13 ... farbliche und optische Formatierungen realisieren? 80811.14 ... den Datenbankpfad zur Laufzeit anpassen? 80911.15 ... die Login-Informationen zur Laufzeit ändern? 81011.16 ... Crystal Report unter LINQ to SQL nutzen? " 810

12 Access-Datenbanken 813Ein erster Blick auf Microsoft Access-Datenbanken 814

Warum Access? 814Access-Datentypen 815Beschränkungen 816

Zugriff aus Visual Basic 816Warum nicht nur ADO.NET? 817Die ADOX-Library , 817Die JRO-Library 818ADO MD 818Einbinden von ADOX und JRO in VB 820Parameter für ADO.NET-Connectionstrings ; 821Access-Datenbankpasswort 821Access-Datenbanksicherheit (Benutzer-/Gruppenebene) 822Datenbankzugriff auf schreibgeschützte Medien (CD, DVD) 823

Datenbanken erstellen 823Die Create-Methode 824Weitere Parameter 824Jet-spezifische Optionen 824

Tabellen/Indizes erstellen/verwalten 826Tabellendefinition 826Indexdefinition 831Erstellen von Prozeduren und Sichten 833Tabellen verknüpfen (Relationen) 834

Zugriffsschutz in Access-Datenbanken 836Grundlagen 836Sichern auf Datenbankebene 837Erstellen neuer Benutzer und Gruppen 838Vergabe von Rechten 839Verschlüsseln von Datenbanken 841

Einbinden externer Tabellen 843Erstellen einer Verbindung 843Aktualisieren einer Verbindung 844Löschen einer Verbindung 845

Replizieren von Datenbanken 845Begriffe 845Aufbau einer Replikatgruppe 846Probleme bei Replikationen 846Vorbereitungen zur praktischen Umsetzung 847Replikat erstellen 848Abgleich von Kopie und Original 848

Datenbankanalyse 849Verwendung von GetSchema 849Datenbankeigenschaften mit ADOX ermitteln 852

20

Tabellen mit ADOX bestimmen 853Sichten/Abfragen mit ADOX bestimmen 855Nutzer und Nutzergruppen auslesen 858Nutzer- und Gruppenberechtigungen ermitteln 860

Weitere Aufgabenstellungen 862Access-Datenbanken reparieren/komprimieren 862Distribution von Access-Datenbanken 863

Access 2007-Datenbanken 863Zugriff auf die Datenbanken 863Neuer Connectionstring 864Übersicht neue Datentypen 864Arbeiten mit den DAOs 865Memofeld mit Archiv-Funktion 866Anlage-Feld 868Rich-Text-Feld 874Multivalue-Feld (MVF) 875

Access 2010-Datenbanken 879Download/Installation Access 2010 Database Engine 880Berechnete Spalten 881Trigger/Datenmakros 883Unterschiede Access 2007/2010 885

How-to-Beispiele 88612.1 ... ADO installieren? 88612.2 ... Access-Datenbanken exklusiv öffnen? 88612.3 ... die Zugriffsgeschwindigkeit auf Access-Datenbanken erhöhen? 88612.4 ... Access-Datenbanken im Netzwerk verwenden? 88612.5 ... alle aktiven Verbindungen zur Datenbank auflisten? 88712.6 ... eine Spalte mit eindeutigen Zufallswerten erzeugen? 88712.7 ... das Datenbank-Kennwort ändern? 88812.8 ... Abfragen über mehrere Datenbanken realisieren? 88912.9 ... die Beschreibung von Datenbankfeldern abrufen? 889

13 Microsoft SQL Server-Einstieg 891Übersicht 892

SQL Server Express 892SQL Server Compact 893Unterschiede SQL Server Express/SQL Server/Jet-Engine 893Client- versus Fileserver-Programmierung 895Die wichtigsten Tools 897Vordefinierte Datenbanken 901Einschränkungen 901Weitere SQL Server-Funktionen im Kurzüberblick 902Zugriff aus Visual Basic 904Einrichten der Anbindung (Assistent) 905Einrichten der Verbindung (Quellcode) 906

Transact-SQL 907Schreibweise 908Kommentare 908Zeichenketten 908

I n h a l t s v e r z e i c h n i s

x Variablen deklarieren/verwenden 909Bedingungen mit IF/ELSE auswerten 910Verwenden von CASE 911Verwenden von WHILE ... BREAK/CONTINUE 911Datum und Uhrzeit in T-SQL 912Verwenden von GOTO 913Fehlerbehandlung 913

Datenbanken mit DMO verwalten 913Einbindung 914Einführungsbeispiel 914

SQL Server Management Objects (SMO) 915Einbindung 915Einführungsbeispiel 916Anmelden am Server 918

Datensicherheit auf dem Microsoft SQL Server 919Überblick Sicherheitsmodell 919Verwalten mit dem SQL Server Management Studio 922Verwalten mit T-SQL 925

How-to-Beispiele 92913.1 ... den Netzwerkzugriff für den SQL Server Express aktivieren? 92913.2 ... die SQL Server Express-Version erkennen? 93113.3 ... die SQL Server Express-Version administrieren? 93113.4 ... alle Nutzer einer Datenbank ermitteln? 93213.5 ... alle registrierten Microsoft SQL Server ermitteln? 93313.6 ... alle Datenbanken und deren Tabellen ermitteln? 93413.7 ... eine Tabelle löschen? 93413.8 ... eine Tabelle mit den SMO erzeugen? 93513.9 ... die Anzahl der Datensätze beschränken? 93613.10 ... Platzhalterzeichen in T-SQL verwenden? 93713.11 ... Teilstrings erzeugen? 93813.12 ... Leerzeichen entfernen? 93813.13 ... mit DROP INDEX jeden Index löschen? :.- 93813.14 ... @@ERROR korrekt verarbeiten? 93913.15 ... die Anzahl der Datensätze einer Abfrage bestimmen? 93913.16 ... IFF ersetzen? 93913.17 ... mit Bedingungen Feldinhalte formatieren? 94013.18 ... Abfragen mit Platzhaltern beschleunigen? 94013.19 ... die Groß-/Kleinschreibung berücksichtigen? 94113.20 ... das Ergebnis einer Stored Procedure speichern? 94113.21 ... eine Datenbank umbenennen? 94213.22 ... eine Datenbank zwischen Servern verschieben? 94213.23 ... eine Datenbankstruktur kopieren? 94313.24 ... nach dem Löschen IDENTITY auf 0 setzen? 94413.25 ... eine Tabellenspalte umbenennen? 94413.26 ... Unterschiede zwischen temporären Tabellen erkennen? 94513.27 ... Daten aus verschiedenen Datenbanken anzeigen? 94513.28 ... die PRINT-Anweisung in VB anzeigen? 945

Übersichten 946Datentypen 946Unterschiede Access- und SQL Server-Datentypen 947

14 Microsoft SQL Server-Programmierung 949Praktisches Arbeiten mit dem SQL Server 950

Erstellen von SQL Server-Datenbanken 950Erzeugen und Verwalten von Tabellen 954Datenbankdiagramme 959Erzeugen und Verwenden von Sichten (Views) 961Gespeicherte Prozeduren verwenden 962Programmierung/Verwendung von Triggern 966Volltextabfragen 970Die Verwendung von FileStream-Storage 976Massenkopieren 982Datenbanken sichern und wiederherstellen 984

Fehlerbehandlung 989Das Fehlermodell 989Verwenden von @@ERROR 990Verwenden von RAISEERROR 991Fehlerbehandlung mit TRY...CATCH 991Fehlerbehandlung mit ADO.NET 993

Weitere Features des Datenzugriffs unter ADO.NET 995Alle verfügbaren SQL Server ermitteln 995Asynchrone Befehlsausführung 995Benachrichtigungen über Datenänderungen 997Multiple Active Resultsets (MARS) 997

CLR-Integration im SQL Server 998Grundsätzlicher Ablauf 999CLR-Unterstützung aktivieren 999Assembly erstellen 1000Benutzerdefinierte Funktionen (UDF) ". 1003Stored Procedures 1004Aggregat-Funktionen 1010Trigger in VB realisieren 1012Mehr Sicherheit 1013Fazit 1014

XML-Unterstützung 1014Der XML-Datentyp 1015XML-Daten mit SELECT erzeugen 1016XML-Abfragen 1020Der Clientzugriff auf die XML-Daten 1022

How-to-Beispiele 102514.1 ... Aktualisierungs- und Löschweitergaben realisieren? 102514.2 ... Änderungen in Tabellen protokollieren? 102514.3 ... SQL-Anweisungen debuggen? 102614.4 ... ein SqlConnection-Objekt programmieren? 102814.5 ... eine Gespeicherte Prozedur aufrufen? 103114.6 ... mit Table Value-Parametern arbeiten? 1034

Inhaltsverzeichnis 23

14.7 ... mit Stapel-Abfragen arbeiten? 103714.8 ... Query Notifications einrichten und auswerten? 103814.9 ... die MARS-Technologie kennen lernen? 104314.10 ... Row-Constructors verwenden? 1047

15 SQL Server Compact 1049Einsatzszenarien 1050

Einschränkungen 1050Fähigkeiten/Vorteile 1051

Installation 1051Datenbanken erstellen, verwalten und einbinden 1053

Visual Studio 1053SQL Server Management Studio 1054Codebasiert mit VB 1055Tabellen und Referenzen erstellen 1057

Zusammenarbeit mit dem DataSet 1060Datenzugriff mit SqlCeResultSet 1061

Datenbindung 1061Das ResultSet konfigurieren 1063Datensätze löschen 1063Datensätze einfügen 1064Datensätze bearbeiten 1064Navigation zwischen den Datensätzen 1065

Zugriff mit LINQ to SQL 1066Anbinden einer vorhandenen Datenbank 1066Erstellen einer neue Datenbank 1067Ergänzungen 1068

Zugriff per Entity Data Model 1069Model First-Entwurf 1069Database First-Entwurf 1070

Der Einsatz als Local Database Cache 1071Beispiel Einweg Synchronisation 1071Bidirektionale Synchronisation 1074

Tipps & Tricks 1078Datenbank auf Remotelaufwerk nutzen 1078Performance verbessern 1078Datenbank von schreibgeschütztem Medium starten 1079Datenbankinformationen abrufen 1079Datenbank reparieren 1080Datenbank komprimieren 1081Datenbank nachträglich verschlüsseln 1082Ein Datenbank-Backup realisieren 1082Fehler in der Visual Studio-IDE vermeiden 1082Daten vom SQL Server zum SQL Server Compact zu kopieren 1082Distribution 1083Weitere Hilfe 1084

16 SQLite - Ein Mini ganz groß iO85Was ist eigentlich SQLite? 1086

Vorteile 1087Nachteile 1087

Vorbereitungen 1088Download/Installation 1088Integration in Ihr Projekt 1088

Praktische Aufgabenstellungen 1089Erzeugen neuer Datenbanken mit Visual Studio 1089Alternative Möglichkeit zum Administrieren der Datenbank 1090Datenbank/Datenbankobjekte per Code erstellen 1092Mögliche Connectionstring-Parameter 1093Datenbankzugriff per DataSet realisieren 1094Besonderheit: InMemory-Datenbank 1096Datenzugriff mit dem Entity Framework 1097SOUNDEX verwenden 1098Volltextabfragen realisieren 1098Eigene skalare Funktionen in VB realisieren 1101Eigene Aggregat-Funktionen in VB realisieren 1103

Tipps & Tricks 1104Für Liebhaber der Kommandozeile — Sqlite3.exe 1104Eine Beispieldatenbank herunterladen 1105Eine Datenbank ver- und entschlüsseln 1105Eine verschlüsselte Datenbank öffnen 1106Testen ob Tabelle vorhanden ist 1106Die Datenbank defragmentieren 1107Mehrere Datenbanken verknüpfen 1107

17 LINQ to SQL 1109Übersicht .1110

Das LINQ to SQL-Datenmodell 1110Der DataContext 1111Die Entitäts-Klassen 1112Umstiegsbeispiel für den »ehemaligen« SQL-Programmierer 1113Datenbank-Entwurfskonzepte 1115

Der schnelle Weg zu den SQL Server-Daten 1115Der LINQ to SQL-Designer 1115Die .DBML-Datei 1116Die Designer.vb-Datei 1118Ein erster Test und ein Blick unter die Motorhaube 1120SQL-Debugging leicht gemacht 1121

Der steinige Weg zur Persistenz 1123Das Datenmodell entwickeln 1123Erzeugen der Datenbank und Herstellen der Verbindung 1125Ein paar Gedanken zum Erstellen neuer Datenbanken 1126

Datenauswahl/Datentypen 1126Einfache Datentypen 1126IQueryable(Of T) 1127Datenauswahl basierend auf Detaildaten 1127

lnhaltsverzeichnis

Bereichsauswahl (Paging) 1128Probleme mit FirstQ 1129

Datenbindung 1130Datenquelle hinzufügen 1130Anzeige von Detaildaten 1132Listendarstellung mit anonymen Typen optimieren 1133Lazy Loading/Prefetch/Delay Loaded 1133ObjectTracking ausschalten 1136

Bearbeiten und Aktualisieren 1136Editieren 1136Fehler beim Aktualisieren 1137Konflikte beim Aktualisieren von Datensätzen 1138Lokale Datenaktualisierung per DataContext 1142Neue Datensätze erzeugen 1143Löschen : 1146

Eingabevalidierung 1147Prüfung auf Feld-Ebene (Eigenschaft) 1148Prüfung auf Datensatz-Ebene (Objekt) 1149Überprüfung vor Update, Insert oder Delete 1149

Stored Procedures 1150Allgemeine Verwendung 1150Skalare Rückgabewerte 1151Typisierte Rückgabewerte 1152Insert/Update/Delete per Stored Procedure 1153

Weitere LINQ to SQL-Features 1155Direkte SQL-Programmierung 1155Verwendung der partiellen Klassen/Methoden 1156

Schlussbemerkung 1158

18 Arbeiten mit dem Entity Framework 1159Das Grundkonzept 1160

Konzeptionelle Schicht 1161Logische Schicht 1163Zuordnungsschicht 1163Wie erstelle ich die Schema-Dateien? 1164Das Gesamtmodell im Überblick 1164Wie kann mit dem EDM gearbeitet werden? 1165Entwurfsmöglichkeiten 1166

Unsere Beispieldatenbank 1167Das Datendiagramm 1168Weitere Tabellen 1168

Der EDM-Entwurf 1170Der EDM-Assistent 1170Der EDM-Designer 1173Weitere Fenster des EDM-Designers 1176Stored Procedures importieren 1178Komplexe Typen 1180Die erzeugten Klassen/partielle Klassen 1182Der Model-First-Entwurf 1184

Einsatz des EntityClient für die Datenabfrage 1186Ein Überblick 1186Einsatzbeispiel 1187Connection aufbauen 1188Parameterabfragen realisieren 1189Wann sollten Sie diese Variante nutzen? 1189

Verwenden der Objektdienste 1190Eine Übersicht 1190Verwendung von eSQL 1191Verwendung von LINQ to Entities 1192

Kurzeinführung in Entity SQL (eSQL) 1194Für den Umsteiger: Unterschiede zu T-SQL 1194Für den Einsteiger 1195

Praktisches Arbeiten mit dem EDM 1202Skalare Werte abfragen 1202Abfrage mit Projektion 1203Detaildaten/Verwendung der Navigationseigenschaften 1203Lazy Loading 1204Wie funktioniert das explizite Laden? 1206Was passiert beim vorzeitigen Laden (Eager-Load)? 1207Delay Loaded 1209Zugriff mit Paging 1209Abrufen einzelner Entitäten 1210Lokale Datenaktualisierung per ObjectContext 1211Einfaches Einfügen von Datensätzen 1212Abrufen eines Identity-Wertes nach dem Einfügen 1213Einfügen von Datensätzen in l:n/m:n-Beziehungen 1214Bearbeiten von Entitäten 1215Übernahme der Daten mit SaveChanges 1216Löschen von Daten 1217Verwendung von Stored Procedures 1219Funktionsimporte ~>. 1221Die Eigenschaft EntityState 1222Verwendung des ObjectStateManagers 1222Anhängen von Objekten 1224Arbeiten mit Vererbung 1226POCO-Unterstützung 1229Validierung 1230Verwenden der partiellen Klassen 1233Abschließender Hinweis 1235

How-to-Beispiele 123718.1 ... den ConnectionString anpassen? 123718.2 ... LINQPad verwenden? 123918.3 ... ChangeTracking deaktivieren? 124218.4 ... SQL-Anweisungen analysieren? 124218.5 ... direkte SQL-Statements an den Server senden? 124418.6 ... weitere Beispiele finden? 1245

I n h a l t s v e r z e i c h n i s

19 WCF - eine Einführung 1247Die Programmierung verteilter Systeme 1248

Intranet oder Internet? 1248Die Vorgänger 1249WCF - die neue Technologie 1250

Allgemeiner Aufbau eines WCF-Systems 1252WCF-Assemblies - die verfügbaren Bausteine 1252Service, Host und Client 1252Nachrichtenaustausch 1254

Das ABC der WCF-Endpunkte 1254Verträge 1255Bindungen 1256Adressen 1259

Programmierung eines WCF-Dienstes 1260Quellcode als Klassenbibliothek 1260Das <ServiceContract>-Attribut 1261Das <OperationContract>-Attribut 1262Service Klassen ohne Vertrags-Interfaces 1263

Der WCF-Host 1263Vorbereitungen 1264Die App.config 1264Die ServiceHost-Klasse 1265Festlegen der Basisadressen 1265Weitere Details der ServiceHost-Klasse 1267Das <system.serviceModel>-Element 1268Austausch der Metadaten (MEX) 1268

Der WCF-Client 1271Vorbereitungen 1271Verwenden von SvcUtil.exe 1272Einsatz des Proxy-Generators von Visual Studio 2010 1274

Verbesserungen unter WCF 4.0 1275Standard-Endpunkte T 1276Multiple Bindungen 1276Standardmäßige MEX-Konfiguration 1277Projektvorlage WCF-Dienstbibliothek ' 1278Einsatz von WcfTestClient.exe 1280App.config mit SvcConfigEditor bearbeiten 1281

How-to-Beispiele 128219.1 ... einen WCF-Webdienst mit Datenzugriffsschicht entwickeln? 128219.2 ... einen Client für unseren WCF-Webdienst entwickeln? 128819.3 ... was tun, wenn der IIS nicht funktioniert? 1291

20 Einführung WCF Data Services 1293Einführung 1294

Warum WCF Data Services? 1294Vor- und Nachteile 1297Und was ist OData? 1298Was ist neu in .NET 4.0? 1299Übersicht der OData-Abfrageoptionen 1299

Inhaltsverzeichnis

Praktisches Arbeiten mit den WCF Data Services 1303Ein erster Data Consumer 1303Verwendung von CreateQuery(Of T) 1306Verwendung von Execute(Of T) 1307Asynchrone Verarbeitung 1307Anzahl der Entitäten bestimmen 1309Verwendung der DataServiceCollection 1310Eigene Methoden über den Data Service bereitstellen 1312Freigabe der Schnittstelle regeln 1315Verwendung von Fiddler 1315

How-to-Beispiele 131720.1 ... einen einfachen WCF Data Service erstellen? 131720.2 ... einen Silverlight-Client mit WCF Data Services anbinden? 1318

2tsj<omplexbeispiel Webshop 1327rundkonzept 1328

Aufgabenstellung 1328Unterschiedliche Frontends für Kunden und Verkäufer 1329

T3ie Datenbankstruktur 1329Datenbankdiagramm 1329Tabellen 1331Stored Procedures 1333Ansichten/Views 1337Bemerkungen 1337

Entwurf Webshop-Projekt/Datenbank 1338Stammdatenverwaltung mit Webdienst 1339

Das Interface 1340Entwurf Webdienst 1340Die Methoden im Einzelnen 1341

Windows-Verwaltungsfrontend 1346Entwurf 1346Verbindung zum Webdienst herstellen - 1346Oberflächengestaltung 1347Implementierung Stammdatenverwaltung 1349Test Stammdatenverwaltung 1352Typisiertes DataSet für den Report 1353Reportentwurf 1354Reporteinbindung 1357Filtern der Artikelgruppen 1359Kunden-Tabelle 1359

ASP.NET-Kundeninterface 1360Übersicht 1360Entwurf Default.aspx 1361Vorbereitung Benutzersteuerelemente 1367Welcome.ascx 1369Shop.ascx 1370Warenkorb.ascx 1373Anmeldung.ascx 1377Bestellung.ascx 1378

Inhaltsverzeichnis -

Danke.ascx 1381Kundenkonto.ascx 1382NeuerKunde.ascx 1382

Abschlusstest und Bemerkungen 1384Test 1384Abschlussbemerkungen 1385

A Glossar 1387

B Wichtige Dateiendungen 1393

c Northwind versus Nordwind 1395

Stichwortverzeichnis 1399