Dieses Buch ist eine komplett für das.NET Framework 2.0 überarbeitete und durch völlig neue Kapitel ergänzte Neuauflage des erfolgreichen Vorgängertitels "Datenbankprogrammierung mit Visual C#.NET".
Mit Einführung der.NET-Technologie hat Microsoft eine neue Ära der Windows-Anwendungsentwicklung eingeläutet. Umfang und Tiefe dieser Technologie sind atemberaubend. Damit sind aber nicht nur die umfassenden Möglichkeiten der Datenbank- und Internetprogrammierung gemeint. Auch die Barrieren zwischen den Entwicklern, die bislang in unterschiedlichen Sprachen ihr Brot verdienten, wurden eingerissen, da die Common Language Runtime (CLR) eine gemeinsame Ebene für alle Sprachen definiert.
Jetzt buhlt eine ständig wachsende Gruppe von.NET-Programmiersprachen um die Gunst des Entwicklers, die wichtigste dieser Sprachen ist das speziell für.NET entwickelte C#.
C# bietet Ihnen die Möglichkeiten und die Flexibilität von C++ und erlaubt trotzdem eine schnelle und unkomplizierte Programmierpraxis wie Visual Basic. C# ist genauso mächtig wie C++, wurde aber komplett neu auf objektorientierter Basis geschrieben.
Inhaltsverzeichnis
Vorwort. 21
1 Einführung. 25
Unsere Werkstatt. 26
Betriebssystem. 26
Internet Information Server. 26
Visual Studio 2005. 27
SQL Server 2005 oder Express Edition. 28
Ergänzende Programme. 28
Weitermachen mit learning by doing! 29
C# und die Datenbankprogrammierung. 29
Zur Geschichte des universellen Datenzugriffs. 30
Die neuen Merkmale webbasierter Anwendungen. 30
Ein Wort zum.NET-Sicherheitskonzept. 33
Was ist neu in.NET 2.0? 35
Ein wenig Datenbanktheorie. 37
Normalisieren von Tabellen. 37
Verknüpfen von Tabellen. 42
Weitere wichtige Begriffe. 46
Einführungsbeispiele. 47
PB1.1 Zugriff auf lokale Access-Datenbank. 48
PB1.2 Anwendung für Microsoft SQL Server. 53
PB1.3 ASP.NET-Webanwendung. 56
PB1.4 ASP.NET-Webdienst. 60
PB1.5 Webdienst-Client. 65
2 Dateien/Verzeichnisse. 69
Operationen mit Verzeichnissen und Dateien. 70
Das Datei-System von Windows. 70
Klassen für Verzeichnis- und Dateioperationen. 70
Verzeichnisse erzeugen und löschen. 71
Verzeichnisse verschieben und umbenennen. 72
Aktuelles Verzeichnis ermitteln bzw. festlegen. 73
Unterverzeichnisse bestimmen. 73
Im Verzeichnis enthaltene Dateien ermitteln. 74
Alle Laufwerke ermitteln. 74
Dateien kopieren, verschieben und umbenennen. 75
Dateiattribute feststellen. 76
Weitere Eigenschaften und Methoden. 78
Anwenden der Path-Klasse. 79
Änderungen im Dateisystem überwachen. 79
Zugriffsberechtigungen für Dateien und Verzeichnisse festlegen. 81
Lese- und Schreibzugriff auf Dateien. 82
Übersicht. 82
Dateien und Streams. 83
Dateiparameter. 84
Textdateien. 86
Binärdateien. 87
Sequenzielle Dateien. 88
Dateien verschlüsseln. 90
Dateien komprimieren. 92
Praxisbeispiele. 93
PB2.1 Datei-Infos gewinnen. 93
PB2.2 Verzeichnis- und Datei-Informationen ermitteln. 95
PB2.3 Auf eine Textdatei zugreifen. 98
PB2.4 Auf eine Binärdatei zugreifen. 100
PB2.5 Auf eine sequenzielle Datei zugreifen. 101
PB2.6 Serialisierte Objekte in einer Datei abspeichern. 105
PB2.7 Einen Objektbaum abspeichern. 108
PB2.8 Eine Datei verschlüsseln. 114
PB2.9 Eine Datei komprimieren. 117
3 XML in Theorie und Praxis. 119
XML - etwas Theorie. 120
Übersicht. 120
Der XML-Grundaufbau. 122
Wohlgeformte Dokumente. 124
Processing Instructions (PI). 126
Elemente und Attribute. 127
XSD-Schemas. 128
XSD-Schemas und ADO.NET. 128
XSD-Schema in Visual Studio.NET erstellen. 130
XML-Datei mit XSD-Schema erzeugen. 132
XSD-Schema aus einer XML-Datei erzeugen. 133
Verwendung des DOM unter.NET. 134
Übersicht. 134
DOM-Integration in C#. 135
Laden von Dokumenten. 135
Erzeugen von XML-Dokumenten. 136
Auslesen von XML-Dateien. 138
Direktzugriff auf einzelne Elemente. 139
Einfügen von Informationen. 140
Suchen in den Baumzweigen. 142
Weitere Möglichkeiten der XML-Verarbeitung. 145
Die relationale Sicht auf XML-Daten mit XmlDataDocument. 145
XML-Daten aus Objektstrukturen erzeugen. 148
Schnelles Suchen in XML-Daten mit XPathNavigator. 151
Schnelles Auslesen von XML-Daten mit dem XmlReader. 153
Erzeugen von XML-Daten mit XmlWriter. 155
XML transformieren mit XSLT. 157
Praxisbeispiele. 159
PB3.1 Mit dem DOM in XML-Dokumenten navigieren. 159
PB3.2 XML-Daten in eine TreeView einlesen. 163
PB3.3 DataSets in XML-Dateien sichern. 167
PB3.4 XML-Serialisierung von Objekten. 170
PB3.5 Das XML-Control in ASP.NET verwenden. 174
4 Datenzugriff unter ADO.NET. 179
Die wichtigsten Klassen in ADO.NET. 180
Klassenhierarchie. 180
Die Klassen der Datenprovider. 181
Klassen im DataSet. 184
Das Zusammenspiel der ADO.NET-Klassen. 184
Das Connection-Objekt. 185
Allgemeiner Aufbau. 185
OleDbConnection. 186
SqlConnection. 187
Fehlerbehandlung beim öffnen einer Verbindung. 190
Schließen einer Verbindung. 191
Verbindungspooling. 192
Transaktionen. 192
Eigenschaften des Connection-Objekts. 193
Methoden des Connection-Objekts. 195
Ereignisse des Connection-Objekts. 196
Der ConnectionStringBuilder. 197
ConnectionString in den Anwendungseinstellungen speichern. 198
Das Command-Objekt. 199
Erzeugen und Anwenden eines Command-Objekts. 199
Erzeugen mittels CreateCommand-Methode. 200
Eigenschaften des Command-Objekts. 200
Methoden des Command-Objekts. 203
Parameter-Objekte. 204
Erzeugen und Anwenden eines Parameter-Objekts. 204
Eigenschaften des Parameter-Objekts. 205
Das CommandBuilder-Objekt. 207
Erzeugen. 207
Anwenden. 207
Einsatzbeschränkungen. 208
Einige Regeln. 208
Optimistisches Konkurrenzmodell. 209
Das DataReader-Objekt. 209
DataReader erzeugen. 209
Daten lesen. 210
Eigenschaften DataReaders. 211
Methoden des DataReaders. 211
Das DataAdapter-Objekt. 212
DataAdapter erzeugen. 212
Command-Eigenschaften. 213
Fill-Methode. 213
Update-Methode. 214
UpdateCommand und Parameter-Objekte. 215
InsertCommand und DeleteCommand. 217
MissingSchemaAction-Eigenschaft. 220
RowUpdating- und RowUpdated-Ereignis. 220
Weitere Highlights des Datenzugriffs unter ADO.NET 2.0. 222
Alle verfügbaren SQL Server ermitteln. 222
Auslesen von Datenbankschemas. 223
Providerfabriken. 223
Massenkopieren. 224
Asynchrone Befehlsausführung. 225
Benachrichtigungen über Datenänderungen. 227
Multiple Active Resultsets (MARS). 227
Praxisbeispiele. 228
PB4.1 Ein SqlConnection-Objekt programmieren. 228
PB4.2 Wichtige ADO.NET-Objekte schnell kennen lernen. 232
PB4.3 Eine Aktionsabfrage ausführen. 234
PB4.4 Daten direkt zur Datenbank hinzufügen oder löschen. 236
PB4.5 Eine gespeicherte Prozedur aufrufen. 239
PB4.6 Eine Access-Auswahlabfrage aufrufen. 241
PB4.7 Parametrisierte Abfragen ausführen. 244
PB4.8 Die Datenbank aktualisieren. 246
PB4.9 Mit Stapel-Abfragen arbeiten. 251
PB4.10 RowUpdating-/RowUpdated-Ereignisse verstehen. 253
PB4.11 Schemainformationen von der Datenbank abrufen. 255
PB4.12 Query Notifications einrichten und auswerten. 258
PB4.13 Die MARS-Technologie kennen lernen. 263
Übersichten. 267
Datentypen. 267
Connection-Objekt. 267
Command-Objekt. 268
Parameter-Objekt. 269
DataReader-Objekt. 269
DataAdapter. 270
CommandBuilder. 271
5 Das DataSet-Objekt im Detail. 273
Einführung. 274
Das Objektmodell. 274
Methoden zum Erzeugen eines DataSets. 276
Weitere wichtige Methoden des DataSets. 278
Die XML-Fähigkeiten des DataSet. 279
Das DataTable-Objekt. 281
DataTable erzeugen. 281
Spalten hinzufügen. 282
Berechnete Spalten. 283
Primärschlüssel ergänzen. 284
Einbinden von Constraints. 285
Hinzufügen von Relationen. 287
Zeilen zur DataTable hinzufügen. 290
Auf den Inhalt einer DataTable zugreifen. 291
Weitere Hinweise zum Bearbeiten von Zeilen. 294
Zeilen löschen. 296
Zeilenstatus und Zeilenversion. 296
Ereignisse des DataTable-Objekts. 299
Datenansichten mit DataView. 301
Erzeugen eines DataView. 301
Sortieren und Filtern von Datensätzen. 302
Suchen von Datensätzen. 303
Zeilenansicht mit DataRowView. 303
Neue DataSet Features. 305
Umwandlungen zwischen DataSet und DataReader. 305
Binäre Serialisierung für DataSet/DataTable. 306
Die DataTable hat aufgerüstet. 307
Schnelleres Laden von DataSets. 307
Typisierte DataSets. 308
Was ist ein typisiertes DataSet? 308
Das Datenquellen-Konzept. 310
Typisierte DataSets und TableAdapter. 311
Praxisbeispiele. 313
PB5.1 Eine DataTable erzeugen und in einer Binärdatei speichern. 313
PB5.2 Eine DataTable in einer Xml-Datei abspeichern. 317
PB5.3 Master-Detailbeziehungen im DataGrid anzeigen. 318
PB5.4 In einem DataView sortieren und filtern. 319
PB5.5 Nach Datensätzen suchen. 321
PB5.6 Vereinfachte Suche nach Datensätzen. 324
PB5.7 Umwandlungen zwischen DataTable und DataReader. 326
PB5.8 Laden großer Datenmengen in ein DataSet. 328
PB5.9 Binäre Serialisierung eines DataSets. 330
PB5.10 Ein DataSet in einen Xml-String konvertieren. 333
PB5.11 Ein untypisiertes in ein typisiertes DataSet laden. 337
PB5.12 Einrichten und Benutzen einer Datenquelle. 341
Übersichten. 345
DataSet. 345
DataTable. 346
DataColumn. 348
DataRow. 348
DataView. 349
6 Windows Forms-Datenbindung. 351
Übersicht. 352
Welche Möglichkeiten der Datenbindung gibt es? 352
Manuelle Datenbindung an einfache Datenfelder. 353
Manuelle Datenbindung an Listen und Tabelleninhalte. 355
Entwurfszeit-Datenbindung an ein typisiertes DataSet. 356
Drag & Drop-Datenbindung. 357
Navigieren im DataSet. 358
Die Anzeige formatieren. 359
Bemerkungen zur BindingSource. 360
Das DataGridView. 360
Vom DataGrid zum DataGridView. 360
Grundlegende Datenbindung. 361
Standardmäßige Anzeige und Bedienung. 362
Wichtige Spalten-Einstellungen. 363
Automatische Größenanpassungen. 364
Selektieren von Zellen. 366
Columns- und Rows-Auflistungen. 368
DataGridViewCellStyle-Objekte. 368
Spaltentypen. 371
Editieren im DataGridView. 374
Fehlerbehandlung. 374
Eingabeprüfung. 375
Praxisbeispiele. 376
PB6.1 Mit einer Objekt-Datenquelle arbeiten. 376
PB6.2 Detailinformationen mit ListBox/ComboBox anzeigen. 380
PB6.3 Steuerelemente manuell an ein DataSet binden. 381
PB6.4 Ein zweites Formular an die Datenquelle binden. 387
PB6.5 Mit der ComboBox zwei Tabellen verknüpfen. 392
PB6.6 Manuelles Binden an ein typisiertes DataSet. 395
PB6.7 1:n-Beziehungen per Drag & Drop-Datenbindung anzeigen. 401
PB6.8 Die Spalten im DataGridView formatieren. 403
PB6.9 Mit DataReader und ListView arbeiten. 405
PB6.10 Bilder aus der Datenbank anzeigen. 409
PB6.11 BLOB-Daten verwalten. 411
PB6.12 BLOB-Daten anzeigen. 413
PB6.13 Daten als Diagramm darstellen. 414
PB6.14 Das DataGridView als Datenbank-Frontend. 417
PB6.15 Ein einfacher Webdienst-Client. 424
7 SQL in Theorie und Praxis. 431
Einführung. 432
SQL-Dialekte. 432
Kategorien von SQL-Anweisungen. 433
Testprogramm und Beispieldatenbank. 434
Hinweise zur Bedienung. 435
Die Beispieldatenbank im Überblick. 435
Alternative Varianten für die SQL-Abfrage. 436
Bemerkungen. 438
Daten abfragen. 439
Abfragen mit SELECT. 439
Alle Spalten auswählen. 440
Auswahl der Spalten. 441
Filtern. 442
Beschränken der Ergebnismenge. 448
Eindeutige Records/doppelte Datensätze. 450
Tabellen verknüpfen. 451
Tabellen vereinigen. 454
Datensätze sortieren. 455
Datensätze gruppieren. 456
Unterabfragen. 457
Daten manipulieren. 462
Einfügen einzelner Datensätze. 462
Einfügen von Abfragedaten. 463
Exportieren/Importieren von Abfragedaten. 465
Aktualisieren/Ändern. 468
Löschen. 468
Erweiterte SQL-Funktionen. 469
Berechnete/Formatierte Spalten. 470
Berechnungsfunktionen. 477
NULL-Werte. 479
Datum und Zeit in SQL-Abfragen. 480
Datentypumwandlungen. 486
Kreuztabellenabfragen. 487
Datenbankverwaltung mit SQL (DDL). 489
Datenbanken. 490
Tabellen. 490
Indizes. 491
Tabellen/Indizes löschen oder verändern. 494
Sichten (Views). 495
Nutzer- und Rechteverwaltung. 496
Datenbankentwurf optimieren. 500
Indizes. 500
Abfrageoptimierung. 500
Weitere Möglichkeiten. 501
SQL in der C#-Praxis. 502
Ausführen oder Abfragen? 502
Einfügen von Strings zur Laufzeit. 503
Datumseingabe. 504
Parameterübergabe. 505
Tipps & Tricks. 508
Wie kann ich nach einem INSERT das Zählerfeld abfragen? 508
Wie kann ich die Anzahl der Datensätze ermitteln? 508
Wie nutze ich Datumsteile in SQL zur Suche? 509
Wie kann ich die Groß-/Kleinschreibung berücksichtigen? 509
Was bedeutet WITH OWNERACCESS OPTION? 510
Warum erhalte ich zu viele Datensätze beim Verknüpfen? 511
Wie lösche ich doppelte Datensätze aus einer Tabelle? 512
Wo ist die IFF-Funktion? 513
Praxisbeispiele. 513
PB7.1 Ein einfaches SQL-Abfrageprogramm erstellen. 513
PB7.2 Aggregatfunktionen auswerten. 516
PB7.3 SQL-Injection verhindern. 517
Übersichten. 522
Die wichtigsten SQL-Befehle. 522
Unterschiede ANSI-SQL und Access-SQL. 523
8 Reporting Services. 525
Übersicht. 526
Report Designer. 526
Report Viewer. 526
Einführungsbeispiele. 527
Der erste Bericht - so einfach geht das! 527
Ein zweiter Bericht - weg mit dem Assistenten! 532
Unsere Werkzeuge zum Berichtsentwurf. 537
Oberfläche des Report-Designers. 537
Toolbox. 538
Bericht-Menü. 539
Programmieren mit Visual Basic. 541
Sortieren, Gruppieren und Filtern von Datensätzen. 545
Allgemeines. 545
Sortieren. 546
Gruppieren. 547
Filtern. 550
Kreuztabellenberichte. 551
Einfache Matrix. 551
Zeilen- und Spaltensummen anzeigen. 551
Zusätzliche berechnete Spalten einfügen. 552
Matrix mit zwei Zeilengruppen. 553
Bilder anzeigen. 554
Ein Bild in den Bericht einbetten. 555
Bilder von einer Datenbank. 555
Externe Bilder. 555
Hintergrundbilder. 556
Diagramme darstellen. 556
Diagrammtypen. 556
Säulendiagramm. 557
Weitere Gruppen hinzufügen. 559
Weitere Diagramme. 561
Parameter anwenden. 562
Parameterdefinition. 562
Einbau von Parametern in den Berichtsentwurf. 563
Parameterwerte an Bericht übergeben. 565
Master-Detail-Reports. 566
Subreports. 566
Eingebettete Datenregionen. 566
Noch mehr Reporting. 566
Hyperlink realisieren. 567
Benutzen von ReportViewer-Ereignissen. 568
Hinzufügen von benutzerdefiniertem Code. 569
Ergänzungen zum ReportViewer. 572
Praxisbeispiele. 574
PB8.1 Einen Unterbericht verwenden. 574
PB8.2 Eine Rechnung anzeigen. 580
PB8.3 Das Drillthrough-Event behandeln. 585
PB8.4 Auf benutzerdefinierte Assembly zugreifen. 589
9 Crystal Report. 595
Übersicht. 596
Ein Einsteigerbeispiel. 596
Der Report-Designer. 602
Der Reportaufbau. 603
Die Druckvorschau-Komponente. 604
Wichtige Funktionen im Überblick. 605
Formelfelder. 605
Parameterfelder. 606
Gruppennamenfelder. 607
Spezialfelder. 607
SQL-Ausdrucksfelder. 607
Laufende Summe-Felder. 608
Unterberichte. 609
Diagramme und Bilder. 610
Weitere Komponenten. 610
Das Ereignis-Modell. 611
Reports entwerfen. 612
Verbindung zur Datenbank herstellen. 612
Sortieren und Gruppieren. 615
Verwenden von Parameterfeldern. 619
Berechnungen im Report. 622
Gestalten mit bedingter Formatierung. 626
Kreuztabellenberichte. 628
Unterberichte. 631
Programmieren der Druckvorschau. 634
Der CrystalReportViewer im Überblick. 634
Wichtige Eigenschaften, Methoden und Ereignisse. 634
Direkte Ausgabe auf dem Drucker. 636
Die Lizenz zum Drucken. 636
Druckerauswahl und Konfiguration. 637
Drucken mit Druckerdialog. 638
Exportieren von Reports. 639
Bestimmen des Exportformats. 639
Export als Datei. 640
Export als E-Mail. 641
Praxisbeispiel - Rechnung mit Crystal Report drucken. 642
Datenbasis anpassen. 642
Report erzeugen. 644
Festlegen der Datenquelle. 644
Berechnungen im Report durchführen. 644
Auswahl der gewünschten Datensätze. 645
Reportdesign. 645
Druckvorschaufenster entwerfen. 647
Zuweisen der Daten und Übergabe der Parameter. 648
Die fertige Rechnung. 649
Tipps & Tricks. 650
Ein Deckblatt erzeugen. 650
Seitenzahlen, Druckdatum etc. einblenden. 650
Spaltensatz oder Etiketten. 650
Die Seitenränder festlegen. 651
Mehrspaltige Reports. 652
Einen Seitenumbruch erzwingen. 652
Die Position und Größe der Druckvorschau vorgeben. 652
Einbetten des Reports in die Applikation. 653
Querdruck auswählen. 653
Ausgabe von RTF-/HTML-Text. 653
Reportauswahl zur Laufzeit. 654
Summe, Anzahl, Mittelwerte etc. berechnen. 654
Farbliche und optische Formatierungen. 655
Datenbankpfad zur Laufzeit anpassen. 656
Ändern der Login-Informationen zur Laufzeit. 656
Crystal Report in ASP.NET-Anwendungen verwenden. 656
10 Verwalten von Access-Datenbanken. 657
Ein erster Blick auf Microsoft Access-Datenbanken. 658
Warum Access? 658
Access-Datentypen. 659
Beschränkungen. 660
Zugriff aus C#. 660
Warum nicht nur ADO.NET? 661
Die ADOX-Library. 661
Die JRO-Library. 662
ADO MD. 662
Einbinden von ADOX und JRO in C#. 664
Parameter für ADO.NET-Connectionstrings. 665
Access-Datenbankpasswort. 665
Access-Datenbanksicherheit (Benutzer-/Gruppenebene). 666
Datenbankzugriff auf schreibgeschützte Medien (CD, DVD). 667
Datenbanken erstellen. 667
Die Create-Methode. 668
Weitere Parameter. 668
Jet-spezifische Optionen. 668
Tabellen/Indizes erstellen/verwalten. 670
Tabellendefinition. 670
Indexdefinition. 675
Erstellen von Prozeduren und Sichten. 677
Tabellen verknüpfen (Relationen). 678
Zugriffsschutz in Access-Datenbanken. 679
Grundlagen. 680
Sichern auf Datenbankebene. 681
Erstellen neuer Benutzer und Gruppen. 681
Vergabe von Rechten. 683
Verschlüsseln von Datenbanken. 685
Einbinden externer Tabellen. 686
Erstellen einer Verbindung. 687
Aktualisieren einer Verbindung. 688
Löschen einer Verbindung. 689
Replizieren von Datenbanken. 689
Begriffe. 689
Aufbau einer Replikatgruppe. 690
Probleme bei Replikationen. 690
Vorbereitungen zur praktischen Umsetzung. 691
Replikat erstellen. 691
Abgleich von Kopie und Original. 692
Datenbankanalyse. 693
Verwendung von GetSchema. 693
Datenbankeigenschaften mit ADOX ermitteln. 696
Tabellen mit ADOX bestimmen. 697
Sichten/Abfragen mit ADOX bestimmen. 699
Nutzer und Nutzergruppen auslesen. 702
Nutzer- und Gruppenberechtigungen ermitteln. 704
Weitere Aufgabenstellungen. 706
Access-Datenbanken reparieren/komprimieren. 706
Distribution von Access-Datenbanken. 707
Tipps & Tricks. 707
Wie prüft man die ADO-Versionsnummer? 707
Wo findet man die neuesten ADO-Versionen? 707
Wie installiere ich ADO? 708
Access-Datenbanken exklusiv öffnen. 708
Zugriffsgeschwindigkeit auf Access-Datenbanken erhöhen. 708
Access-Datenbanken im Netzwerk. 709
Alle aktiven Verbindungen zur Datenbank auflisten. 709
Spalte mit eindeutigen Zufallswerten erzeugen. 710
Datenbank-Kennwort ändern. 710
Abfragen über mehrere Datenbanken realisieren. 711
Beschreibung von Datenbankfeldern abrufen. 711
11 Microsoft SQL Server. 713
Übersicht. 714
Was ist die Express Edition? 714
Unterschiede Express Edition/MS SQL Server/Jet-Engine. 714
Die wichtigsten Tools des SQL Servers. 715
Vordefinierte Datenbanken. 719
Einschränkungen. 719
Zugriff aus C#. 720
Transact-SQL - Die Sprache des SQL Servers. 722
Schreibweise. 723
Kommentare. 723
Deklaration/Verwendung von Variablen. 723
Bedingungen mit IF/ELSE auswerten. 724
Verwenden von CASE. 725
Verwenden von WHILE.BREAK/CONTINUE. 726
Verwenden von GOTO. 727
Fehlerbehandlung. 727
Datenbanken verwalten mit DMO. 727
Installation/Einbindung. 727
Einfuhrungsbeispiel. 728
SQL Server Management Objects (SMO). 730
Einbindung. 730
Einführungsbeispiel. 731
Anmelden am Server. 732
Praktisches Arbeiten mit dem SQL Server. 733
Erstellen von SQL Server-Datenbanken. 733
Erzeugen und Verwalten von Tabellen. 736
Datenbankdiagramme. 742
Erzeugen und Verwenden von Sichten (Views). 743
Verwendung von gespeicherten Prozeduren. 744
Programmierung/Verwendung von Triggern. 748
Volltextabfragen. 751
Fehlerbehandlung. 756
Das Fehlermodell des SQL Servers. 756
Verwenden von @@ERROR. 757
Verwenden von RAISEERROR. 758
Fehlerbehandlung mit TRY...CATCH. 759
Fehlerbehandlung mit ADO.NET. 761
CLR-Integration im SQL Server 2005. 762
Grundsätzlicher Ablauf. 762
CLR-Unterstützung aktivieren. 763
Assembly erstellen. 763
Benutzerdefinierte Funktionen (UDF). 767
Stored Procedures. 768
Aggregat-Funktionen. 773
Trigger in.NET realisieren. 776
Mehr Sicherheit bitte. 777
Fazit. 778
Datensicherheit auf dem Microsoft SQL Server. 778
Überblick. 779
Verwalten mit dem SQL Server Management Studio. 782
Verwalten mit T-SQL. 784
XML-Unterstützung. 788
Der XML-Datentyp. 788
XML-Daten mit SELECT erzeugen. 789
XML-Abfragen. 793
Der Clientzugriff auf die XML-Daten. 795
Webdienste über den SQL Server 2005 bereitstellen. 798
Erstellen der Stored Procedures/Functions. 798
Erzeugen des HTTP-Endpoints. 799
Einbinden des Webdienstes in C#. 801
Tipps & Tricks. 803
Netzwerkzugriff auf den SQL Server Express aktivieren. 803
Die SQL Server Express Edition administrieren. 803
Die SQL Server Express Edition erkennen. 804
Kann ich mit der Express Edition die Volltextsuche nutzen? 805
Mit der Express Edition ein Backup/Restore realisieren. 805
SQLDMO 2005 installieren. 806
Alle Nutzer einer Datenbank ermitteln. 806
Alle registrierten Microsoft SQL Server ermitteln. 807
Alle Datenbanken und deren Tabellen ermitteln. 808
Eine Tabelle löschen. 809
Eine Tabelle mit den DMO erzeugen. 810
Anzahl der Datensätze beschränken. 810
Platzhalterzeichen in T-SQL. 811
Teilstrings erzeugen. 811
Leerzeichen entfernen. 812
Lässt sich mit DROP INDEX jeder Index löschen? 812
Warum wird @@ERROR nicht korrekt verarbeitet? 812
Die Anzahl der Datensätze einer Abfrage bestimmen. 812
Kann man IFF ersetzen? 813
Mit Bedingungen Feldinhalte formatieren. 813
Warum sind Abfragen mit Platzhaltern so langsam? 814
Groß-/Kleinschreibung berücksichtigen. 814
Das Ergebnis einer Stored Procedure speichern. 815
Eine Datenbank umbenennen. 815
Eine Datenbank zwischen Servern verschieben. 816
Nach dem Löschen IDENTITY auf 0 setzen. 816
Datenbankstruktur kopieren. 817
Eine Tabellenspalte umbenennen. 818
Aktualisierungs- und Löschweitergaben realisieren. 818
Kein ORDER BY in Views? 818
Änderungen in Tabellen protokollieren. 819
Unterschiede zwischen temporären Tabellen. 819
SQL-Anweisungen debuggen. 819
Daten aus verschiedenen Datenbanken anzeigen. 822
Kann man die PRINT-Anweisung in C# anzeigen? 822
Übersichten. 823
Datentypen. 823
Unterschiede Access- und SQL Server-Datentypen. 824
12 Datenbindung in ASP.NET-Anwendungen. 825
Übersicht Datenbindung in ASP.NET 2.0. 826
Grundkonzept. 827
Die verschiedenen DataSource-Steuerelemente. 827
SqlDataSource im Detail. 828
Datenauswahl mit Parametern. 830
Parameter für INSERT, UPDATE und DELETE. 831
FilterExpression. 833
Caching. 833
Weitere Methoden. 834
Ereignisse. 834
AccessDataSource - der Spezialist. 835
Zugriff auf Geschäftsobjekte mit der ObjectDataSource. 836
Verbindung zwischen Objekt und DataSource. 836
Ein Beispiel sorgt für Klarheit. 837
Geschäftsobjekte in einer Session verwalten. 841
Typisierte DataSets und ObjectDataSource. 843
Verwendung von TableAdaptern in ASP.NET-Seiten. 843
Datenauswahl und Anzeige mit TableAdaptern. 844
Datenmanipulation mit TableAdaptern. 847
ObjectDataSource und Typisierte DataSets. 849
Weitere Datenquellen. 854
SitemapDataSource. 854
Verwalten strukturierter Daten mit der XmlDataSource. 856
Das GridView-Control im Detail. 857
Auswahlfunktion (Zeilenauswahl). 857
Auswahl mit mehrspaltigem Index realisieren. 858
Hyperlink-Spalte für Detailansicht nutzen. 858
Spalten erzeugen/konfigurieren. 860
Template-Spalten verwenden. 860
Paging im GridView realisieren. 864
Editieren und Löschen im GridView. 865
Einfügen von Datensätzen. 865
Keine Daten, was tun? 865
DetailsView. 866
Einfügen neuer Datensätze. 866
Datensatzauswahl. 867
FormView. 868
DataList. 871
Layout verändern. 872
Bearbeitungsfunktionen implementieren. 872
Repeater. 874
Datenbindung mit einfachen Server-Controls. 875
Label/TextBox. 875
CheckBoxList, BulletList, RadioButtonList, DropDownList, ListBox. 876
Hierarchische Datenanzeige mit dem TreeView-Control. 878
Eingabeprüfung mit den Validator-Controls. 881
Übersicht. 881
Wo findet die Fehlerprüfung statt? 881
Verwendung. 882
RequiredFieldValidator. 883
CompareValidator. 883
RangeValidator. 885
RegularExpressionValidator. 886
CustomValidator. 887
ValidationSummary. 889
Weitere Möglichkeiten der Validation-Controls. 890
Reports in ASP.NET-Anwendungen verwenden. 890
Der Microsoft ReportViewer. 890
Direkter Excel-/PDF-Export. 892
Parameterübergabe an lokale Reports. 894
Crystal Reports anzeigen. 895
Praxisbeispiele. 896
PB12.1 Zellen im GridView formatieren. 896
PB12.2 Ein GridView mit Scrollbar realisieren. 897
PB12.3 Ein GridView mit Mouseover-Effekt realisieren. 898
PB12.4 GridView-Daten im Excel-Format exportieren. 899
PB12.5 Detaildaten in einem Popup-Fenster anzeigen. 902
PB12.6 Keine Daten vorhanden, was tun? 905
PB12.7 Zeilensumme im GridView berechnen. 906
PB12.8 Im GridView eine Spaltensummen berechnen. 906
PB12.9 Keine korrekte Anzeige von Währungswerten im GridView. 908
PB12.10 Eingabewerte im GridView validieren. 908
PB12.11 E-Mail-Versand in ASP.NET. 909
PB12.12 Export auf den IIS. 912
13 Webdienste. 915
Webdienst-Grundlagen. 916
Zur Bedeutung von Webdiensten. 916
Kommunikation per SOAP. 916
Die Sprache WSDL. 917
Das DISCO-Dokument. 917
Funktionsprinzip von Webdiensten. 918
Anforderungen an eine Webklasse. 920
Schnittstellen-Kompatibilität. 920
Ein Webdienst im Detail. 921
Aufgabenstellung. 921
Webdienst-Projekt eröffnen und Datenbank einfügen. 921
Die Projektdateien. 922
Namensgebung. 924
Ihr Quellcode. 925
Webdienst testen. 927
Ein Webdienstclient im Detail. 930
Aufgabenstellung. 930
Webdienstclient-Projekt eröffnen. 931
Webverweis hinzufügen. 931
Die Projektdateien. 931
Ihr Quellcode. 935
Webdienstclient testen. 937
Verbesserungen. 937
Zugriff verweigert (Access denied). 938
Web-Methoden asynchron abrufen. 939
Synchrone und asynchrone Methoden. 939
Bedienoberfläche für Testclient. 939
Quellcode für Testclient. 940
Client testen. 941
Bemerkungen. 942
Probleme mit Zugriffsrechten. 943
Fehlende Schreibrechte bei Access-Datenbanken. 943
Benutzer ASPNET hinzufügen. 943
Impersonation. 944
Webdienst und Sicherheit. 945
Digitale Signatur von SOAP-Nachrichten. 945
Verschlüsseln von SOAP-Nachrichten. 946
Tipps & Tricks. 947
Webverweis aktualisieren. 947
Die Webdienst-Adresse zur Laufzeit ändern. 947
Praxisbeispiele. 947
PB13.1 Eine einfache Klasse programmieren und anwenden. 947
PB13.2 Lokale Klassen in einem Webdienst nutzen. 951
PB13.3 Komplexe Objekte mit Webdiensten übertragen. 954
PB13.4 Daten im Webdienst Zwischenspeichern. 959
PB13.5 Authentifikation für Webdienste nutzen. 961
PB13.6 DataSets komprimiert und verschlüsselt übertragen. 962
14 Komplexbeispiel Webshop. 967
Grundkonzept. 968
Aufgabenstellung. 968
Unterschiedliche Frontends für Kunden und Verkäufer. 969
Die Datenbankstruktur. 969
Datenbankdiagramm. 969
Tabellen. 970
Abfragen. 972
Stammdatenverwaltung mit Webdienst. 975
Das Interface. 975
Entwurf. 975
Die Methoden im Einzelnen. 976
Windows-Verwaltungsfrontend. 981
Entwurf. 981
Verbindung zum Webdienst herstellen. 982
Oberflächengestaltung. 982
Implementierung Stammdatenverwaltung. 984
Test Stammdatenverwaltung. 987
Ein typisiertes DataSet für den Report erstellen. 988
Der Reportentwurf. 988
Implementierung Reporteinbindung. 991
Filtern der Artikelgruppen. 992
Kunden-Tabelle. 993
ASP.NET-Kundeninterface. 994
Übersicht. 994
Entwurf. 995
Oberflächengestaltung. 995
Programmieren der Anwendungslogik. 1004
Detailansicht. 1015
Abschlusstest und Bemerkungen. 1016
Test. 1016
Abschlussbemerkungen. 1017
A Glossar. 1019
B Wichtige Datei-Extensions. 1023
C Northwind versus Nordwind. 1025
Stichwortverzeichnis. 1029
Mit Einführung der.NET-Technologie hat Microsoft eine neue Ära der Windows-Anwendungsentwicklung eingeläutet. Umfang und Tiefe dieser Technologie sind atemberaubend. Damit sind aber nicht nur die umfassenden Möglichkeiten der Datenbank- und Internetprogrammierung gemeint. Auch die Barrieren zwischen den Entwicklern, die bislang in unterschiedlichen Sprachen ihr Brot verdienten, wurden eingerissen, da die Common Language Runtime (CLR) eine gemeinsame Ebene für alle Sprachen definiert.
Jetzt buhlt eine ständig wachsende Gruppe von.NET-Programmiersprachen um die Gunst des Entwicklers, die wichtigste dieser Sprachen ist das speziell für.NET entwickelte C#.
C# bietet Ihnen die Möglichkeiten und die Flexibilität von C++ und erlaubt trotzdem eine schnelle und unkomplizierte Programmierpraxis wie Visual Basic. C# ist genauso mächtig wie C++, wurde aber komplett neu auf objektorientierter Basis geschrieben.
Inhaltsverzeichnis
Vorwort. 21
1 Einführung. 25
Unsere Werkstatt. 26
Betriebssystem. 26
Internet Information Server. 26
Visual Studio 2005. 27
SQL Server 2005 oder Express Edition. 28
Ergänzende Programme. 28
Weitermachen mit learning by doing! 29
C# und die Datenbankprogrammierung. 29
Zur Geschichte des universellen Datenzugriffs. 30
Die neuen Merkmale webbasierter Anwendungen. 30
Ein Wort zum.NET-Sicherheitskonzept. 33
Was ist neu in.NET 2.0? 35
Ein wenig Datenbanktheorie. 37
Normalisieren von Tabellen. 37
Verknüpfen von Tabellen. 42
Weitere wichtige Begriffe. 46
Einführungsbeispiele. 47
PB1.1 Zugriff auf lokale Access-Datenbank. 48
PB1.2 Anwendung für Microsoft SQL Server. 53
PB1.3 ASP.NET-Webanwendung. 56
PB1.4 ASP.NET-Webdienst. 60
PB1.5 Webdienst-Client. 65
2 Dateien/Verzeichnisse. 69
Operationen mit Verzeichnissen und Dateien. 70
Das Datei-System von Windows. 70
Klassen für Verzeichnis- und Dateioperationen. 70
Verzeichnisse erzeugen und löschen. 71
Verzeichnisse verschieben und umbenennen. 72
Aktuelles Verzeichnis ermitteln bzw. festlegen. 73
Unterverzeichnisse bestimmen. 73
Im Verzeichnis enthaltene Dateien ermitteln. 74
Alle Laufwerke ermitteln. 74
Dateien kopieren, verschieben und umbenennen. 75
Dateiattribute feststellen. 76
Weitere Eigenschaften und Methoden. 78
Anwenden der Path-Klasse. 79
Änderungen im Dateisystem überwachen. 79
Zugriffsberechtigungen für Dateien und Verzeichnisse festlegen. 81
Lese- und Schreibzugriff auf Dateien. 82
Übersicht. 82
Dateien und Streams. 83
Dateiparameter. 84
Textdateien. 86
Binärdateien. 87
Sequenzielle Dateien. 88
Dateien verschlüsseln. 90
Dateien komprimieren. 92
Praxisbeispiele. 93
PB2.1 Datei-Infos gewinnen. 93
PB2.2 Verzeichnis- und Datei-Informationen ermitteln. 95
PB2.3 Auf eine Textdatei zugreifen. 98
PB2.4 Auf eine Binärdatei zugreifen. 100
PB2.5 Auf eine sequenzielle Datei zugreifen. 101
PB2.6 Serialisierte Objekte in einer Datei abspeichern. 105
PB2.7 Einen Objektbaum abspeichern. 108
PB2.8 Eine Datei verschlüsseln. 114
PB2.9 Eine Datei komprimieren. 117
3 XML in Theorie und Praxis. 119
XML - etwas Theorie. 120
Übersicht. 120
Der XML-Grundaufbau. 122
Wohlgeformte Dokumente. 124
Processing Instructions (PI). 126
Elemente und Attribute. 127
XSD-Schemas. 128
XSD-Schemas und ADO.NET. 128
XSD-Schema in Visual Studio.NET erstellen. 130
XML-Datei mit XSD-Schema erzeugen. 132
XSD-Schema aus einer XML-Datei erzeugen. 133
Verwendung des DOM unter.NET. 134
Übersicht. 134
DOM-Integration in C#. 135
Laden von Dokumenten. 135
Erzeugen von XML-Dokumenten. 136
Auslesen von XML-Dateien. 138
Direktzugriff auf einzelne Elemente. 139
Einfügen von Informationen. 140
Suchen in den Baumzweigen. 142
Weitere Möglichkeiten der XML-Verarbeitung. 145
Die relationale Sicht auf XML-Daten mit XmlDataDocument. 145
XML-Daten aus Objektstrukturen erzeugen. 148
Schnelles Suchen in XML-Daten mit XPathNavigator. 151
Schnelles Auslesen von XML-Daten mit dem XmlReader. 153
Erzeugen von XML-Daten mit XmlWriter. 155
XML transformieren mit XSLT. 157
Praxisbeispiele. 159
PB3.1 Mit dem DOM in XML-Dokumenten navigieren. 159
PB3.2 XML-Daten in eine TreeView einlesen. 163
PB3.3 DataSets in XML-Dateien sichern. 167
PB3.4 XML-Serialisierung von Objekten. 170
PB3.5 Das XML-Control in ASP.NET verwenden. 174
4 Datenzugriff unter ADO.NET. 179
Die wichtigsten Klassen in ADO.NET. 180
Klassenhierarchie. 180
Die Klassen der Datenprovider. 181
Klassen im DataSet. 184
Das Zusammenspiel der ADO.NET-Klassen. 184
Das Connection-Objekt. 185
Allgemeiner Aufbau. 185
OleDbConnection. 186
SqlConnection. 187
Fehlerbehandlung beim öffnen einer Verbindung. 190
Schließen einer Verbindung. 191
Verbindungspooling. 192
Transaktionen. 192
Eigenschaften des Connection-Objekts. 193
Methoden des Connection-Objekts. 195
Ereignisse des Connection-Objekts. 196
Der ConnectionStringBuilder. 197
ConnectionString in den Anwendungseinstellungen speichern. 198
Das Command-Objekt. 199
Erzeugen und Anwenden eines Command-Objekts. 199
Erzeugen mittels CreateCommand-Methode. 200
Eigenschaften des Command-Objekts. 200
Methoden des Command-Objekts. 203
Parameter-Objekte. 204
Erzeugen und Anwenden eines Parameter-Objekts. 204
Eigenschaften des Parameter-Objekts. 205
Das CommandBuilder-Objekt. 207
Erzeugen. 207
Anwenden. 207
Einsatzbeschränkungen. 208
Einige Regeln. 208
Optimistisches Konkurrenzmodell. 209
Das DataReader-Objekt. 209
DataReader erzeugen. 209
Daten lesen. 210
Eigenschaften DataReaders. 211
Methoden des DataReaders. 211
Das DataAdapter-Objekt. 212
DataAdapter erzeugen. 212
Command-Eigenschaften. 213
Fill-Methode. 213
Update-Methode. 214
UpdateCommand und Parameter-Objekte. 215
InsertCommand und DeleteCommand. 217
MissingSchemaAction-Eigenschaft. 220
RowUpdating- und RowUpdated-Ereignis. 220
Weitere Highlights des Datenzugriffs unter ADO.NET 2.0. 222
Alle verfügbaren SQL Server ermitteln. 222
Auslesen von Datenbankschemas. 223
Providerfabriken. 223
Massenkopieren. 224
Asynchrone Befehlsausführung. 225
Benachrichtigungen über Datenänderungen. 227
Multiple Active Resultsets (MARS). 227
Praxisbeispiele. 228
PB4.1 Ein SqlConnection-Objekt programmieren. 228
PB4.2 Wichtige ADO.NET-Objekte schnell kennen lernen. 232
PB4.3 Eine Aktionsabfrage ausführen. 234
PB4.4 Daten direkt zur Datenbank hinzufügen oder löschen. 236
PB4.5 Eine gespeicherte Prozedur aufrufen. 239
PB4.6 Eine Access-Auswahlabfrage aufrufen. 241
PB4.7 Parametrisierte Abfragen ausführen. 244
PB4.8 Die Datenbank aktualisieren. 246
PB4.9 Mit Stapel-Abfragen arbeiten. 251
PB4.10 RowUpdating-/RowUpdated-Ereignisse verstehen. 253
PB4.11 Schemainformationen von der Datenbank abrufen. 255
PB4.12 Query Notifications einrichten und auswerten. 258
PB4.13 Die MARS-Technologie kennen lernen. 263
Übersichten. 267
Datentypen. 267
Connection-Objekt. 267
Command-Objekt. 268
Parameter-Objekt. 269
DataReader-Objekt. 269
DataAdapter. 270
CommandBuilder. 271
5 Das DataSet-Objekt im Detail. 273
Einführung. 274
Das Objektmodell. 274
Methoden zum Erzeugen eines DataSets. 276
Weitere wichtige Methoden des DataSets. 278
Die XML-Fähigkeiten des DataSet. 279
Das DataTable-Objekt. 281
DataTable erzeugen. 281
Spalten hinzufügen. 282
Berechnete Spalten. 283
Primärschlüssel ergänzen. 284
Einbinden von Constraints. 285
Hinzufügen von Relationen. 287
Zeilen zur DataTable hinzufügen. 290
Auf den Inhalt einer DataTable zugreifen. 291
Weitere Hinweise zum Bearbeiten von Zeilen. 294
Zeilen löschen. 296
Zeilenstatus und Zeilenversion. 296
Ereignisse des DataTable-Objekts. 299
Datenansichten mit DataView. 301
Erzeugen eines DataView. 301
Sortieren und Filtern von Datensätzen. 302
Suchen von Datensätzen. 303
Zeilenansicht mit DataRowView. 303
Neue DataSet Features. 305
Umwandlungen zwischen DataSet und DataReader. 305
Binäre Serialisierung für DataSet/DataTable. 306
Die DataTable hat aufgerüstet. 307
Schnelleres Laden von DataSets. 307
Typisierte DataSets. 308
Was ist ein typisiertes DataSet? 308
Das Datenquellen-Konzept. 310
Typisierte DataSets und TableAdapter. 311
Praxisbeispiele. 313
PB5.1 Eine DataTable erzeugen und in einer Binärdatei speichern. 313
PB5.2 Eine DataTable in einer Xml-Datei abspeichern. 317
PB5.3 Master-Detailbeziehungen im DataGrid anzeigen. 318
PB5.4 In einem DataView sortieren und filtern. 319
PB5.5 Nach Datensätzen suchen. 321
PB5.6 Vereinfachte Suche nach Datensätzen. 324
PB5.7 Umwandlungen zwischen DataTable und DataReader. 326
PB5.8 Laden großer Datenmengen in ein DataSet. 328
PB5.9 Binäre Serialisierung eines DataSets. 330
PB5.10 Ein DataSet in einen Xml-String konvertieren. 333
PB5.11 Ein untypisiertes in ein typisiertes DataSet laden. 337
PB5.12 Einrichten und Benutzen einer Datenquelle. 341
Übersichten. 345
DataSet. 345
DataTable. 346
DataColumn. 348
DataRow. 348
DataView. 349
6 Windows Forms-Datenbindung. 351
Übersicht. 352
Welche Möglichkeiten der Datenbindung gibt es? 352
Manuelle Datenbindung an einfache Datenfelder. 353
Manuelle Datenbindung an Listen und Tabelleninhalte. 355
Entwurfszeit-Datenbindung an ein typisiertes DataSet. 356
Drag & Drop-Datenbindung. 357
Navigieren im DataSet. 358
Die Anzeige formatieren. 359
Bemerkungen zur BindingSource. 360
Das DataGridView. 360
Vom DataGrid zum DataGridView. 360
Grundlegende Datenbindung. 361
Standardmäßige Anzeige und Bedienung. 362
Wichtige Spalten-Einstellungen. 363
Automatische Größenanpassungen. 364
Selektieren von Zellen. 366
Columns- und Rows-Auflistungen. 368
DataGridViewCellStyle-Objekte. 368
Spaltentypen. 371
Editieren im DataGridView. 374
Fehlerbehandlung. 374
Eingabeprüfung. 375
Praxisbeispiele. 376
PB6.1 Mit einer Objekt-Datenquelle arbeiten. 376
PB6.2 Detailinformationen mit ListBox/ComboBox anzeigen. 380
PB6.3 Steuerelemente manuell an ein DataSet binden. 381
PB6.4 Ein zweites Formular an die Datenquelle binden. 387
PB6.5 Mit der ComboBox zwei Tabellen verknüpfen. 392
PB6.6 Manuelles Binden an ein typisiertes DataSet. 395
PB6.7 1:n-Beziehungen per Drag & Drop-Datenbindung anzeigen. 401
PB6.8 Die Spalten im DataGridView formatieren. 403
PB6.9 Mit DataReader und ListView arbeiten. 405
PB6.10 Bilder aus der Datenbank anzeigen. 409
PB6.11 BLOB-Daten verwalten. 411
PB6.12 BLOB-Daten anzeigen. 413
PB6.13 Daten als Diagramm darstellen. 414
PB6.14 Das DataGridView als Datenbank-Frontend. 417
PB6.15 Ein einfacher Webdienst-Client. 424
7 SQL in Theorie und Praxis. 431
Einführung. 432
SQL-Dialekte. 432
Kategorien von SQL-Anweisungen. 433
Testprogramm und Beispieldatenbank. 434
Hinweise zur Bedienung. 435
Die Beispieldatenbank im Überblick. 435
Alternative Varianten für die SQL-Abfrage. 436
Bemerkungen. 438
Daten abfragen. 439
Abfragen mit SELECT. 439
Alle Spalten auswählen. 440
Auswahl der Spalten. 441
Filtern. 442
Beschränken der Ergebnismenge. 448
Eindeutige Records/doppelte Datensätze. 450
Tabellen verknüpfen. 451
Tabellen vereinigen. 454
Datensätze sortieren. 455
Datensätze gruppieren. 456
Unterabfragen. 457
Daten manipulieren. 462
Einfügen einzelner Datensätze. 462
Einfügen von Abfragedaten. 463
Exportieren/Importieren von Abfragedaten. 465
Aktualisieren/Ändern. 468
Löschen. 468
Erweiterte SQL-Funktionen. 469
Berechnete/Formatierte Spalten. 470
Berechnungsfunktionen. 477
NULL-Werte. 479
Datum und Zeit in SQL-Abfragen. 480
Datentypumwandlungen. 486
Kreuztabellenabfragen. 487
Datenbankverwaltung mit SQL (DDL). 489
Datenbanken. 490
Tabellen. 490
Indizes. 491
Tabellen/Indizes löschen oder verändern. 494
Sichten (Views). 495
Nutzer- und Rechteverwaltung. 496
Datenbankentwurf optimieren. 500
Indizes. 500
Abfrageoptimierung. 500
Weitere Möglichkeiten. 501
SQL in der C#-Praxis. 502
Ausführen oder Abfragen? 502
Einfügen von Strings zur Laufzeit. 503
Datumseingabe. 504
Parameterübergabe. 505
Tipps & Tricks. 508
Wie kann ich nach einem INSERT das Zählerfeld abfragen? 508
Wie kann ich die Anzahl der Datensätze ermitteln? 508
Wie nutze ich Datumsteile in SQL zur Suche? 509
Wie kann ich die Groß-/Kleinschreibung berücksichtigen? 509
Was bedeutet WITH OWNERACCESS OPTION? 510
Warum erhalte ich zu viele Datensätze beim Verknüpfen? 511
Wie lösche ich doppelte Datensätze aus einer Tabelle? 512
Wo ist die IFF-Funktion? 513
Praxisbeispiele. 513
PB7.1 Ein einfaches SQL-Abfrageprogramm erstellen. 513
PB7.2 Aggregatfunktionen auswerten. 516
PB7.3 SQL-Injection verhindern. 517
Übersichten. 522
Die wichtigsten SQL-Befehle. 522
Unterschiede ANSI-SQL und Access-SQL. 523
8 Reporting Services. 525
Übersicht. 526
Report Designer. 526
Report Viewer. 526
Einführungsbeispiele. 527
Der erste Bericht - so einfach geht das! 527
Ein zweiter Bericht - weg mit dem Assistenten! 532
Unsere Werkzeuge zum Berichtsentwurf. 537
Oberfläche des Report-Designers. 537
Toolbox. 538
Bericht-Menü. 539
Programmieren mit Visual Basic. 541
Sortieren, Gruppieren und Filtern von Datensätzen. 545
Allgemeines. 545
Sortieren. 546
Gruppieren. 547
Filtern. 550
Kreuztabellenberichte. 551
Einfache Matrix. 551
Zeilen- und Spaltensummen anzeigen. 551
Zusätzliche berechnete Spalten einfügen. 552
Matrix mit zwei Zeilengruppen. 553
Bilder anzeigen. 554
Ein Bild in den Bericht einbetten. 555
Bilder von einer Datenbank. 555
Externe Bilder. 555
Hintergrundbilder. 556
Diagramme darstellen. 556
Diagrammtypen. 556
Säulendiagramm. 557
Weitere Gruppen hinzufügen. 559
Weitere Diagramme. 561
Parameter anwenden. 562
Parameterdefinition. 562
Einbau von Parametern in den Berichtsentwurf. 563
Parameterwerte an Bericht übergeben. 565
Master-Detail-Reports. 566
Subreports. 566
Eingebettete Datenregionen. 566
Noch mehr Reporting. 566
Hyperlink realisieren. 567
Benutzen von ReportViewer-Ereignissen. 568
Hinzufügen von benutzerdefiniertem Code. 569
Ergänzungen zum ReportViewer. 572
Praxisbeispiele. 574
PB8.1 Einen Unterbericht verwenden. 574
PB8.2 Eine Rechnung anzeigen. 580
PB8.3 Das Drillthrough-Event behandeln. 585
PB8.4 Auf benutzerdefinierte Assembly zugreifen. 589
9 Crystal Report. 595
Übersicht. 596
Ein Einsteigerbeispiel. 596
Der Report-Designer. 602
Der Reportaufbau. 603
Die Druckvorschau-Komponente. 604
Wichtige Funktionen im Überblick. 605
Formelfelder. 605
Parameterfelder. 606
Gruppennamenfelder. 607
Spezialfelder. 607
SQL-Ausdrucksfelder. 607
Laufende Summe-Felder. 608
Unterberichte. 609
Diagramme und Bilder. 610
Weitere Komponenten. 610
Das Ereignis-Modell. 611
Reports entwerfen. 612
Verbindung zur Datenbank herstellen. 612
Sortieren und Gruppieren. 615
Verwenden von Parameterfeldern. 619
Berechnungen im Report. 622
Gestalten mit bedingter Formatierung. 626
Kreuztabellenberichte. 628
Unterberichte. 631
Programmieren der Druckvorschau. 634
Der CrystalReportViewer im Überblick. 634
Wichtige Eigenschaften, Methoden und Ereignisse. 634
Direkte Ausgabe auf dem Drucker. 636
Die Lizenz zum Drucken. 636
Druckerauswahl und Konfiguration. 637
Drucken mit Druckerdialog. 638
Exportieren von Reports. 639
Bestimmen des Exportformats. 639
Export als Datei. 640
Export als E-Mail. 641
Praxisbeispiel - Rechnung mit Crystal Report drucken. 642
Datenbasis anpassen. 642
Report erzeugen. 644
Festlegen der Datenquelle. 644
Berechnungen im Report durchführen. 644
Auswahl der gewünschten Datensätze. 645
Reportdesign. 645
Druckvorschaufenster entwerfen. 647
Zuweisen der Daten und Übergabe der Parameter. 648
Die fertige Rechnung. 649
Tipps & Tricks. 650
Ein Deckblatt erzeugen. 650
Seitenzahlen, Druckdatum etc. einblenden. 650
Spaltensatz oder Etiketten. 650
Die Seitenränder festlegen. 651
Mehrspaltige Reports. 652
Einen Seitenumbruch erzwingen. 652
Die Position und Größe der Druckvorschau vorgeben. 652
Einbetten des Reports in die Applikation. 653
Querdruck auswählen. 653
Ausgabe von RTF-/HTML-Text. 653
Reportauswahl zur Laufzeit. 654
Summe, Anzahl, Mittelwerte etc. berechnen. 654
Farbliche und optische Formatierungen. 655
Datenbankpfad zur Laufzeit anpassen. 656
Ändern der Login-Informationen zur Laufzeit. 656
Crystal Report in ASP.NET-Anwendungen verwenden. 656
10 Verwalten von Access-Datenbanken. 657
Ein erster Blick auf Microsoft Access-Datenbanken. 658
Warum Access? 658
Access-Datentypen. 659
Beschränkungen. 660
Zugriff aus C#. 660
Warum nicht nur ADO.NET? 661
Die ADOX-Library. 661
Die JRO-Library. 662
ADO MD. 662
Einbinden von ADOX und JRO in C#. 664
Parameter für ADO.NET-Connectionstrings. 665
Access-Datenbankpasswort. 665
Access-Datenbanksicherheit (Benutzer-/Gruppenebene). 666
Datenbankzugriff auf schreibgeschützte Medien (CD, DVD). 667
Datenbanken erstellen. 667
Die Create-Methode. 668
Weitere Parameter. 668
Jet-spezifische Optionen. 668
Tabellen/Indizes erstellen/verwalten. 670
Tabellendefinition. 670
Indexdefinition. 675
Erstellen von Prozeduren und Sichten. 677
Tabellen verknüpfen (Relationen). 678
Zugriffsschutz in Access-Datenbanken. 679
Grundlagen. 680
Sichern auf Datenbankebene. 681
Erstellen neuer Benutzer und Gruppen. 681
Vergabe von Rechten. 683
Verschlüsseln von Datenbanken. 685
Einbinden externer Tabellen. 686
Erstellen einer Verbindung. 687
Aktualisieren einer Verbindung. 688
Löschen einer Verbindung. 689
Replizieren von Datenbanken. 689
Begriffe. 689
Aufbau einer Replikatgruppe. 690
Probleme bei Replikationen. 690
Vorbereitungen zur praktischen Umsetzung. 691
Replikat erstellen. 691
Abgleich von Kopie und Original. 692
Datenbankanalyse. 693
Verwendung von GetSchema. 693
Datenbankeigenschaften mit ADOX ermitteln. 696
Tabellen mit ADOX bestimmen. 697
Sichten/Abfragen mit ADOX bestimmen. 699
Nutzer und Nutzergruppen auslesen. 702
Nutzer- und Gruppenberechtigungen ermitteln. 704
Weitere Aufgabenstellungen. 706
Access-Datenbanken reparieren/komprimieren. 706
Distribution von Access-Datenbanken. 707
Tipps & Tricks. 707
Wie prüft man die ADO-Versionsnummer? 707
Wo findet man die neuesten ADO-Versionen? 707
Wie installiere ich ADO? 708
Access-Datenbanken exklusiv öffnen. 708
Zugriffsgeschwindigkeit auf Access-Datenbanken erhöhen. 708
Access-Datenbanken im Netzwerk. 709
Alle aktiven Verbindungen zur Datenbank auflisten. 709
Spalte mit eindeutigen Zufallswerten erzeugen. 710
Datenbank-Kennwort ändern. 710
Abfragen über mehrere Datenbanken realisieren. 711
Beschreibung von Datenbankfeldern abrufen. 711
11 Microsoft SQL Server. 713
Übersicht. 714
Was ist die Express Edition? 714
Unterschiede Express Edition/MS SQL Server/Jet-Engine. 714
Die wichtigsten Tools des SQL Servers. 715
Vordefinierte Datenbanken. 719
Einschränkungen. 719
Zugriff aus C#. 720
Transact-SQL - Die Sprache des SQL Servers. 722
Schreibweise. 723
Kommentare. 723
Deklaration/Verwendung von Variablen. 723
Bedingungen mit IF/ELSE auswerten. 724
Verwenden von CASE. 725
Verwenden von WHILE.BREAK/CONTINUE. 726
Verwenden von GOTO. 727
Fehlerbehandlung. 727
Datenbanken verwalten mit DMO. 727
Installation/Einbindung. 727
Einfuhrungsbeispiel. 728
SQL Server Management Objects (SMO). 730
Einbindung. 730
Einführungsbeispiel. 731
Anmelden am Server. 732
Praktisches Arbeiten mit dem SQL Server. 733
Erstellen von SQL Server-Datenbanken. 733
Erzeugen und Verwalten von Tabellen. 736
Datenbankdiagramme. 742
Erzeugen und Verwenden von Sichten (Views). 743
Verwendung von gespeicherten Prozeduren. 744
Programmierung/Verwendung von Triggern. 748
Volltextabfragen. 751
Fehlerbehandlung. 756
Das Fehlermodell des SQL Servers. 756
Verwenden von @@ERROR. 757
Verwenden von RAISEERROR. 758
Fehlerbehandlung mit TRY...CATCH. 759
Fehlerbehandlung mit ADO.NET. 761
CLR-Integration im SQL Server 2005. 762
Grundsätzlicher Ablauf. 762
CLR-Unterstützung aktivieren. 763
Assembly erstellen. 763
Benutzerdefinierte Funktionen (UDF). 767
Stored Procedures. 768
Aggregat-Funktionen. 773
Trigger in.NET realisieren. 776
Mehr Sicherheit bitte. 777
Fazit. 778
Datensicherheit auf dem Microsoft SQL Server. 778
Überblick. 779
Verwalten mit dem SQL Server Management Studio. 782
Verwalten mit T-SQL. 784
XML-Unterstützung. 788
Der XML-Datentyp. 788
XML-Daten mit SELECT erzeugen. 789
XML-Abfragen. 793
Der Clientzugriff auf die XML-Daten. 795
Webdienste über den SQL Server 2005 bereitstellen. 798
Erstellen der Stored Procedures/Functions. 798
Erzeugen des HTTP-Endpoints. 799
Einbinden des Webdienstes in C#. 801
Tipps & Tricks. 803
Netzwerkzugriff auf den SQL Server Express aktivieren. 803
Die SQL Server Express Edition administrieren. 803
Die SQL Server Express Edition erkennen. 804
Kann ich mit der Express Edition die Volltextsuche nutzen? 805
Mit der Express Edition ein Backup/Restore realisieren. 805
SQLDMO 2005 installieren. 806
Alle Nutzer einer Datenbank ermitteln. 806
Alle registrierten Microsoft SQL Server ermitteln. 807
Alle Datenbanken und deren Tabellen ermitteln. 808
Eine Tabelle löschen. 809
Eine Tabelle mit den DMO erzeugen. 810
Anzahl der Datensätze beschränken. 810
Platzhalterzeichen in T-SQL. 811
Teilstrings erzeugen. 811
Leerzeichen entfernen. 812
Lässt sich mit DROP INDEX jeder Index löschen? 812
Warum wird @@ERROR nicht korrekt verarbeitet? 812
Die Anzahl der Datensätze einer Abfrage bestimmen. 812
Kann man IFF ersetzen? 813
Mit Bedingungen Feldinhalte formatieren. 813
Warum sind Abfragen mit Platzhaltern so langsam? 814
Groß-/Kleinschreibung berücksichtigen. 814
Das Ergebnis einer Stored Procedure speichern. 815
Eine Datenbank umbenennen. 815
Eine Datenbank zwischen Servern verschieben. 816
Nach dem Löschen IDENTITY auf 0 setzen. 816
Datenbankstruktur kopieren. 817
Eine Tabellenspalte umbenennen. 818
Aktualisierungs- und Löschweitergaben realisieren. 818
Kein ORDER BY in Views? 818
Änderungen in Tabellen protokollieren. 819
Unterschiede zwischen temporären Tabellen. 819
SQL-Anweisungen debuggen. 819
Daten aus verschiedenen Datenbanken anzeigen. 822
Kann man die PRINT-Anweisung in C# anzeigen? 822
Übersichten. 823
Datentypen. 823
Unterschiede Access- und SQL Server-Datentypen. 824
12 Datenbindung in ASP.NET-Anwendungen. 825
Übersicht Datenbindung in ASP.NET 2.0. 826
Grundkonzept. 827
Die verschiedenen DataSource-Steuerelemente. 827
SqlDataSource im Detail. 828
Datenauswahl mit Parametern. 830
Parameter für INSERT, UPDATE und DELETE. 831
FilterExpression. 833
Caching. 833
Weitere Methoden. 834
Ereignisse. 834
AccessDataSource - der Spezialist. 835
Zugriff auf Geschäftsobjekte mit der ObjectDataSource. 836
Verbindung zwischen Objekt und DataSource. 836
Ein Beispiel sorgt für Klarheit. 837
Geschäftsobjekte in einer Session verwalten. 841
Typisierte DataSets und ObjectDataSource. 843
Verwendung von TableAdaptern in ASP.NET-Seiten. 843
Datenauswahl und Anzeige mit TableAdaptern. 844
Datenmanipulation mit TableAdaptern. 847
ObjectDataSource und Typisierte DataSets. 849
Weitere Datenquellen. 854
SitemapDataSource. 854
Verwalten strukturierter Daten mit der XmlDataSource. 856
Das GridView-Control im Detail. 857
Auswahlfunktion (Zeilenauswahl). 857
Auswahl mit mehrspaltigem Index realisieren. 858
Hyperlink-Spalte für Detailansicht nutzen. 858
Spalten erzeugen/konfigurieren. 860
Template-Spalten verwenden. 860
Paging im GridView realisieren. 864
Editieren und Löschen im GridView. 865
Einfügen von Datensätzen. 865
Keine Daten, was tun? 865
DetailsView. 866
Einfügen neuer Datensätze. 866
Datensatzauswahl. 867
FormView. 868
DataList. 871
Layout verändern. 872
Bearbeitungsfunktionen implementieren. 872
Repeater. 874
Datenbindung mit einfachen Server-Controls. 875
Label/TextBox. 875
CheckBoxList, BulletList, RadioButtonList, DropDownList, ListBox. 876
Hierarchische Datenanzeige mit dem TreeView-Control. 878
Eingabeprüfung mit den Validator-Controls. 881
Übersicht. 881
Wo findet die Fehlerprüfung statt? 881
Verwendung. 882
RequiredFieldValidator. 883
CompareValidator. 883
RangeValidator. 885
RegularExpressionValidator. 886
CustomValidator. 887
ValidationSummary. 889
Weitere Möglichkeiten der Validation-Controls. 890
Reports in ASP.NET-Anwendungen verwenden. 890
Der Microsoft ReportViewer. 890
Direkter Excel-/PDF-Export. 892
Parameterübergabe an lokale Reports. 894
Crystal Reports anzeigen. 895
Praxisbeispiele. 896
PB12.1 Zellen im GridView formatieren. 896
PB12.2 Ein GridView mit Scrollbar realisieren. 897
PB12.3 Ein GridView mit Mouseover-Effekt realisieren. 898
PB12.4 GridView-Daten im Excel-Format exportieren. 899
PB12.5 Detaildaten in einem Popup-Fenster anzeigen. 902
PB12.6 Keine Daten vorhanden, was tun? 905
PB12.7 Zeilensumme im GridView berechnen. 906
PB12.8 Im GridView eine Spaltensummen berechnen. 906
PB12.9 Keine korrekte Anzeige von Währungswerten im GridView. 908
PB12.10 Eingabewerte im GridView validieren. 908
PB12.11 E-Mail-Versand in ASP.NET. 909
PB12.12 Export auf den IIS. 912
13 Webdienste. 915
Webdienst-Grundlagen. 916
Zur Bedeutung von Webdiensten. 916
Kommunikation per SOAP. 916
Die Sprache WSDL. 917
Das DISCO-Dokument. 917
Funktionsprinzip von Webdiensten. 918
Anforderungen an eine Webklasse. 920
Schnittstellen-Kompatibilität. 920
Ein Webdienst im Detail. 921
Aufgabenstellung. 921
Webdienst-Projekt eröffnen und Datenbank einfügen. 921
Die Projektdateien. 922
Namensgebung. 924
Ihr Quellcode. 925
Webdienst testen. 927
Ein Webdienstclient im Detail. 930
Aufgabenstellung. 930
Webdienstclient-Projekt eröffnen. 931
Webverweis hinzufügen. 931
Die Projektdateien. 931
Ihr Quellcode. 935
Webdienstclient testen. 937
Verbesserungen. 937
Zugriff verweigert (Access denied). 938
Web-Methoden asynchron abrufen. 939
Synchrone und asynchrone Methoden. 939
Bedienoberfläche für Testclient. 939
Quellcode für Testclient. 940
Client testen. 941
Bemerkungen. 942
Probleme mit Zugriffsrechten. 943
Fehlende Schreibrechte bei Access-Datenbanken. 943
Benutzer ASPNET hinzufügen. 943
Impersonation. 944
Webdienst und Sicherheit. 945
Digitale Signatur von SOAP-Nachrichten. 945
Verschlüsseln von SOAP-Nachrichten. 946
Tipps & Tricks. 947
Webverweis aktualisieren. 947
Die Webdienst-Adresse zur Laufzeit ändern. 947
Praxisbeispiele. 947
PB13.1 Eine einfache Klasse programmieren und anwenden. 947
PB13.2 Lokale Klassen in einem Webdienst nutzen. 951
PB13.3 Komplexe Objekte mit Webdiensten übertragen. 954
PB13.4 Daten im Webdienst Zwischenspeichern. 959
PB13.5 Authentifikation für Webdienste nutzen. 961
PB13.6 DataSets komprimiert und verschlüsselt übertragen. 962
14 Komplexbeispiel Webshop. 967
Grundkonzept. 968
Aufgabenstellung. 968
Unterschiedliche Frontends für Kunden und Verkäufer. 969
Die Datenbankstruktur. 969
Datenbankdiagramm. 969
Tabellen. 970
Abfragen. 972
Stammdatenverwaltung mit Webdienst. 975
Das Interface. 975
Entwurf. 975
Die Methoden im Einzelnen. 976
Windows-Verwaltungsfrontend. 981
Entwurf. 981
Verbindung zum Webdienst herstellen. 982
Oberflächengestaltung. 982
Implementierung Stammdatenverwaltung. 984
Test Stammdatenverwaltung. 987
Ein typisiertes DataSet für den Report erstellen. 988
Der Reportentwurf. 988
Implementierung Reporteinbindung. 991
Filtern der Artikelgruppen. 992
Kunden-Tabelle. 993
ASP.NET-Kundeninterface. 994
Übersicht. 994
Entwurf. 995
Oberflächengestaltung. 995
Programmieren der Anwendungslogik. 1004
Detailansicht. 1015
Abschlusstest und Bemerkungen. 1016
Test. 1016
Abschlussbemerkungen. 1017
A Glossar. 1019
B Wichtige Datei-Extensions. 1023
C Northwind versus Nordwind. 1025
Stichwortverzeichnis. 1029