A Note Regarding Supplemental Files
Vorwort
Ein Buch für Einsteiger und Fortgeschrittene
Ideal auch für Visual Basic Umsteiger
Begleitdateien
Zu den Autoren
Danksagungen
Vorwort
1. Erste Schritte
Unsere Werkstatt
Betriebssystem
Visual Studio 2012
Visual Studio 2012 Express
Visual Studio 2012 Professional
Visual Studio 2012 Premium
Visual Studio 2012 Ultimate
Anforderungen an Hard- und Software
SQL Server oder LocalDB
Northwind-Datenbank
Microsoft Access
C# und die Datenbankprogrammierung
Zur Geschichte des universellen Datenzugriffs
Merkmale webbasierter Anwendungen
Allgemeine Architektur
Grundprinzip ist die Trennung von Datenbank und Datenhaltung
Kein Platz mehr für das Recordset-Objekt
Das DataSet als Mini-Datenbank
Ohne XML geht gar nichts mehr
LINQ to XML
SQL-Kenntnisse sind ein Muss!
ASP.NET ist keine Hürde!
OOP
Entity Framework
Ein Wort zum .NET-Sicherheitskonzept
Wie es früher einmal war
Sicherheitsmechanismen
Was ist neu in .NET 4.5/Visual Studio 2012?
ADO.NET und SQL-Server
Asynchrone Methoden
SQL-Server
Sicherheit
Entity Framework
Die neue Visual Studio 2012 Entwicklungsumgebung
Neues Outfit der Symbolleiste
Veränderter Projektmappen-Explorer
Registerkartenverwaltung der geöffneten Dateien
Suchen überall
Neuer Verweis Manager-Dialog
Projekt-Kompatibilität
Neue Projekttypen
Zusätzliche Tools und Features
Neuheiten im .NET Framework 4.5
WinRT-Anwendungen
Portable Klassenbibliotheken
Parallele Computervorgänge
Internet
WPF
WCF
C# 5.0 – Sprache und Compiler
Asynchrone Methoden
Caller Information
Ein wenig Datenbanktheorie
Normalisieren von Tabellen
Ausgangstabelle
Erste Normalform
Zweite Normalform
Dritte Normalform
Normalisierung nach dem Prinzip »Faule Sekretärin«
Verknüpfen von Tabellen
1:1-Beziehung
1:n-Beziehung
n:m-Beziehung
Beziehungsdiagramm der FIRMA-Datenbank
Referenzielle Integrität
Datenbank-Prototyp verwenden
Weitere wichtige Begriffe
Sekundärindex
NULL-Werte
Einführungsbeispiele
1.1 ... auf eine lokale Access-Datenbank zugreifen?
Datenquelle einrichten
Die fertige Datenquelle
Benutzerschnittstelle
Programm testen
Quellcode
Bemerkungen
1.2 ... mit dem SQL Server arbeiten?
Datenquelle einrichten
Programm testen
1.3 ... eine einfache LINQ to SQL-Anwendung schreiben?
Oberfläche
Quellcode
1.4 ... eine einfache ASP.NET-Webanwendung entwickeln?
Erstellen der ASP.NET-Website
Datenbank hinzufügen
GridView hinzufügen
GridView an Datenquelle anbinden
Test
Bemerkungen
1.5 ... meine erste WPF-Anwendung erstellen?
Oberfläche
Quellcode (.xaml)
Quellcode (.cs)
Test
1.6 ... einen einfachen WCF-Dienst entwickeln?
Webdienst
Webclient
Test
Bemerkungen
Die Qual der Wahl
DataReader – der schnelle Lesezugriff
DataSet – die Datenbank im Hauptspeicher
Typisiertes versus untypisiertes DataSet
Objektrelationales Mapping – die Zukunft?
LINQ to SQL/LINQ to Entities
Die Exoten
2. Einführung in LINQ
Die LINQ-Philosophie
OOP-Modell versus relationales Modell
Besonderheiten beim ORM
Ein erstes LINQ-Beispiel
Klassischer Datenbankzugriff
Datenbankzugriff unter LINQ
Der Weg zu LINQ
Wie war es in der Zeit vor LINQ?
Wichtige LINQ-Features
Die LINQ Architektur
LINQ Implementationen
LINQ-Grundlagen
Typinferenz
Objekt-Initialisierer
Anonyme Typen
Erweiterungsmethoden
Lambda-Ausdrücke
Abfragen mit LINQ to Objects
Grundlegende Syntax
Zwei alternative Schreibweisen von LINQ-Abfragen
Die wichtigsten Abfrageoperatoren
Übersicht
Allgemeines zu den folgenden Beispielen
Die Projektionsoperatoren Select und SelectMany
Select
SelectMany
Der Restriktionsoperator Where
Die Sortierungsoperatoren OrderBy und ThenBy
OrderBy/OrderByDescending
ThenBy/ThenByDescending
Reverse
Der Gruppierungsoperator GroupBy
Verknüpfen mit Join
Aggregat-Operatoren
Count
Sum
Verzögerte Ausführung von LINQ-Abfragen
Konvertierungsmethoden
Der Zuweisungsoperator Let
Abfragen mit PLINQ
Probleme mit der Sortierfolge
How-to-Beispiele
2.1 ... LINQ-Abfragen verstehen?
Oberfläche
Quellcode
Test
2.2 ... nichtgenerische Collections abfragen?
Oberfläche
ArrayList erzeugen
Variante 1 (mit Cast-Operator)
Variante 2 (mit Typisierung)
Variante 3 (mit OfType)
Test
Bemerkungen
3. ADO.NET-Grundlagen
Die wichtigsten Klassen in ADO.NET
Klassenhierarchie
Die Klassen der Datenprovider
.NET-Datenprovider
Weitere Datenprovider
Anzeige der installierten Datenprovider
Herstellerspezifische Datenprovider
Klassen im DataSet
Das Zusammenspiel der ADO.NET-Klassen
Das Connection-Objekt
Allgemeiner Aufbau
OleDbConnection
Parameter für OleDb-Zugriff
OleDb-Provider für Access Datenbank (.mdb)
OleDb-Provider für Access 2007/2010 (.accdb)
SqlConnection
Parameter für SQL Server-Zugriff
Verbindung mit einer SQL Server-Datenbankdatei
Fehlerbehandlung beim Öffnen einer Verbindung
Schließen einer Verbindung
Verbindungspooling
Transaktionen
Eigenschaften des Connection-Objekts
ConnectionString-Eigenschaft
Database- und DataSource-Eigenschaft
Provider-Eigenschaft
ServerVersion-Eigenschaft
ConnectionTimeout-Eigenschaft
State-Eigenschaft
Methoden des Connection-Objekts
Open- und Close-Methode
ChangeDatabase-Methode
CreateCommand-Methode
BeginTransaction-Methode
Ereignisse des Connection-Objekts
InfoMessage-Ereignis
StateChange-Ereignis
Der ConnectionStringBuilder
ConnectionString in den Anwendungseinstellungen speichern
Das Command-Objekt
Erzeugen und Anwenden eines Command-Objekts
Erzeugen mittels CreateCommand-Methode
Eigenschaften des Command-Objekts
Connection- und CommandText-Eigenschaft
CommandTimeout-Eigenschaft
CommandType-Eigenschaft
UpdatedRowSource-Eigenschaft
Methoden des Command-Objekts
ExecuteNonQuery-Methode
ExecuteReader-Methode
ExecuteScalar-Methode
Freigabe von Connection- und Command-Objekten
Parameter-Objekte
Erzeugen und Anwenden eines Parameter-Objekts
Eigenschaften des Parameter-Objekts
ParameterName- und Value-Eigenschaft
DbType, OleDbType und SqlDbType-Eigenschaft
Direction-Eigenschaft
Weitere Eigenschaften
Das CommandBuilder-Objekt
Erzeugen
Anwenden
Einsatzbeschränkungen
Einige Regeln
Optimistisches Konkurrenzmodell
Das DataReader-Objekt
DataReader erzeugen
Daten lesen
Eigenschaften des DataReaders
Item-Eigenschaft
FieldCount-Eigenschaft
IsClosed-Eigenschaft
Methoden des DataReaders
Read-Methode
GetValue- und GetValues-Methode
GetOrdinal- und ähnliche Methoden
Das DataAdapter-Objekt
DataAdapter erzeugen
Konstruktor mit SELECT-String und Connection-Objekt
Konstruktor mit SelectCommand-Objekt
Command-Eigenschaften
Fill-Methode
Begrenzung der Datenmenge
Update-Methode
Bemerkungen
UpdateCommand und Parameter-Objekte
SourceVersion- und SourceColumn-Eigenschaft
InsertCommand und DeleteCommand
Vorgehensweise
Parameter definieren
Datensätze hinzufügen
Datensätze löschen
MissingSchemaAction-Eigenschaft
RowUpdating- und RowUpdated-Ereignis
Der Parameter RowUpdatingEventArgs
Die Status-Eigenschaft
Zugriff auf Excel-Arbeitsmappen
Zugriffsmöglichkeiten
OLE DB-Connectionstring
Zugriff auf Excel 2007/2010/2013-Arbeitsmappen
Neue Mappen erstellen
Daten in ein Tabellenblatt eintragen
Daten aktualisieren
Daten auslesen
Zugriff auf Tabellenbereiche
OLE-Automation
Weitere ADO.NET-Features
Auslesen von Datenbankschemas
Providerfabriken
Task-orientierte asynchrone Programmierung
How-to-Beispiele
3.1 ... wichtige ADO.NET-Objekte kennen lernen?
Oberfläche
Quellcode (OleDb)
Test
Bemerkungen
3.2 ... eine Aktionsabfrage ausführen?
Oberfläche
Quellcode
Test
Bemerkungen
3.3 ... Daten direkt zur Datenbank hinzufügen oder löschen?
Oberfläche
Quellcode
Test
Bemerkungen
3.4 ... eine Access-Auswahlabfrage ausführen?
Oberfläche
Quellcode
Test
Bemerkungen
3.5 ... parametrierte Abfragen ausführen?
Oberfläche
Quellcode 1 (Nordwind.mdb)
Erster Test
Quellcode 2 (Northwind.accdb)
Quellcode 3 (Northwind.mdf)
Test
3.6 ... die Datenbank aktualisieren?
Oberfläche
Quellcode (Command-Objekte selbst programmiert)
Test
Quellcode (mit CommandBuilder)
Test
Bemerkungen
3.7 ... RowUpdating-/RowUpdated-Ereignisse verstehen?
Oberfläche
Quellcode
Test
Bemerkungen
3.8 ... Schemainformationen der Datenbank abrufen?
Oberfläche
Quellcode
Test
Bemerkungen
3.9 ... einen Connectionstring verschlüsseln?
Oberfläche
Quelltext
Ärger mit den Zugriffsrechten
Test
Bemerkung
3.10 ... die neuen asynchronen Methoden nutzen?
Oberfläche
Quellcode (klassischer synchroner Zugriff)
Quellcode (asynchroner Zugriff)
Test
Bemerkung
3.11 ... eine klassische Datenzugriffsschicht entwickeln?
Vorbereitungen
Selektieren aller Kunden
Kunde hinzufügen
Kunde löschen
Kunden aktualisieren
TestClient
Bemerkungen
Übersichten
Datentypen
Connection-Objekt
Command-Objekt
Parameter-Objekt
DataReader-Objekt
DataAdapter
CommandBuilder
4. Das DataSet-Objekt im Detail
Einführung
Das Objektmodell
Objekthierarchie
Die wichtigsten Klassen
Methoden zum Erzeugen eines DataSets
Copy-Methode
Clone-Methode
GetChanges-/HasChanges-Methode
Weitere wichtige Methoden des DataSets
RejectChanges-/AcceptChanges-Methode
Merge-Methode
Die XML-Fähigkeiten des DataSets
XML-Datei erzeugen
Inhalt der XML-Datei
Das DataTable-Objekt
DataTable erzeugen
Unabhängige DataTable
Kopieren
Spalten hinzufügen
Berechnete Spalten
Primärschlüssel ergänzen
Bemerkungen
Einbinden von Constraints
ForeignKeyConstraint
AcceptRejectRule-Eigenschaft
UniqueConstraint
Hinzufügen von Relationen
Erstellen einer DataRelation
GetChildRows-Methode
CreateConstraints-Flag
Zeilen zur DataTable hinzufügen
NewRow-Methode
ImportRow-Methode
Auf den Inhalt einer DataTable zugreifen
Columns- und Rows-Eigenschaften
TableName- und ColumnName-Eigenschaften
Find-Methode
Übergabe eines DataColumn-Objekts
Select-Methode
Weitere Hinweise zum Bearbeiten von Zeilen
Zeilen löschen
Delete oder Remove?
Zeilenstatus und Zeilenversion
RowState-Eigenschaft
AcceptChanges- und RejectChanges-Methode
DataRowVersion-Enumeration und HasVersion-Methode
Ereignisse des DataTable-Objekts
Übersicht
ColumnChanging- und ColumnChanged-Ereignis
RowChanging- und RowChanged-Ereignis
Eigenschaften der Änderungsereignisse
Datenansichten mit DataView
Erzeugen eines DataView
CreateDataView-Methode des DefaultViewManager
Sortieren und Filtern von Datensätzen
Suchen von Datensätzen
Zeilenansicht mit DataRowView
Zugriff
Neu erzeugen
Weitere DataSet-Features
Umwandlungen zwischen DataSet und DataReader
DataTableReader
Load-Methode
LoadOption-Enumeration
Binäre Serialisierung für DataSet/DataTable
RemotingFormat-Eigenschaft
Binäre- kontra XML-Serialisierung
Die DataTable kann mehr XML
Schnelles Laden von DataSets
Typisierte DataSets
Was ist ein typisiertes DataSet?
Welche Vorteile bietet ein typisiertes DataSet?
Wie erzeuge ich ein typisiertes DataSet?
Das Datenquellen-Konzept
Typisierte DataSets und TableAdapter
Warum sollte man ein typisiertes DataSet einsetzen?
Der TableAdapter
LINQ to DataSet
Untypisierte DataSets abfragen
Probleme mit NULL-Werten
Typisierte DataSets abfragen
Abhängigkeiten zwischen den Tabellen auflösen
How-to-Beispiele
4.1 ... eine DataTable erzeugen und in einer Binärdatei speichern?
Oberfläche
Quellcode
Test
Bemerkungen
4.2 ... eine DataTable in einer XML-Datei abspeichern?
Oberfläche
Quellcode
Test
4.3 ... Master-Detailbeziehungen im DataGrid anzeigen?
Oberfläche
Quellcode
Test
4.4 ... in einem DataView sortieren und filtern?
Oberfläche
Quellcode
Test
Bemerkungen
4.5 ... nach Datensätzen suchen?
Oberfläche
Quellcode
Test
4.6 ... vereinfacht nach Datensätzen suchen?
Oberfläche
Quellcode
Test
4.7 ... zwischen DataTable und DataReader umwandeln?
Oberfläche
Quellcode (Allgemein)
Quellcode (DataTable → DataReader)
Quellcode (DataReader → DataTable)
Test
4.8 ... große Datenmengen in ein DataSet laden?
Oberfläche
Quellcode
Test
4.9 ... ein DataSet binär serialisieren?
Oberfläche
Quellcode
Test
4.10 ... ein DataSet in einen XML-String konvertieren?
Konvertierungsmethoden
Testoberfläche Form1
Erzeugen eines untypisierten DataSets als Testobjekt
Test
4.11 ... ein untypisiertes in ein typisiertes DataSet laden?
Konvertierungscode
Normales DataSet erzeugen
Typisiertes DataSet
Testoberfläche
Test
4.12 ... ein typisiertes DataSet mit LINQ abfragen?
Oberfläche
Typisiertes DataSet
Quellcode
Test
Bemerkungen
4.13 ... mit LINQ to DataSet die Datenbank aktualisieren?
Bedienoberfläche
Typisiertes DataSet erstellen und anbinden
Quellcode
Test
Bemerkungen
Übersichten
DataSet
DataTable
DataColumn
DataRow
DataView
5. Windows Forms-Datenbindung
Einführung
Manuelle Datenbindung an einfache Datenfelder
BindingSource erzeugen
Binding-Objekt
DataBindings-Collection
Bindungen löschen
Bemerkungen
Manuelle Datenbindung an Listen und Tabelleninhalte
DataGridView
Datenbindung von ComboBox und ListBox
Entwurfszeit-Datenbindung an ein typisiertes DataSet
Drag & Drop-Datenbindung
Navigieren im DataSet
Vor- und Rückwärtsblättern
Hinzufügen und Löschen
Aktualisieren und Abbrechen
BindingNavigator
Die Anzeige formatieren
Das DataGridView
Vom DataGrid zum DataGridView
Grundlegende Datenbindung
Standardmäßige Anzeige und Bedienung
Wichtige Spalteneinstellungen
AllowUserToOrderColumns
Frozen
HeaderText
DisplayIndex
Resizable und MinimumWidth
Visible
Automatische Größenanpassungen
AutoSizeColumnsMode-Eigenschaft/AutoResizeColumns-Methode
AutoSizeMode-Eigenschaft/AutoResizeColumn-Methode
AutoSizeRowsMode-Eigenschaft/AutoResizeRows-Methode
AutoResizeRow-Methode
Selektieren von Zellen
SelectedCells-, SelectedRows- und SelectedColumns-Eigenschaften
CurrentCell- und CurrentCellAddress-Eigenschaften
Columns- und Rows-Auflistungen
DataGridViewCellStyle-Objekte
Datenformatierung
Outfit
Benutzerdefinierte Zellenformatierung
Spaltentypen
DataGridViewButtonColumn
DataGridViewComboBoxColumn
DataGridViewCheckBoxColumn
DataGridViewImageColumn
Editieren im DataGridView
Fehlerbehandlung
Eingabeprüfung
How-to-Beispiele
5.1 ... eine Objekt-Datenquelle verwenden?
Quellcode (Geschäftsobjekte)
Datenquelle hinzufügen
Quellcode (Form1)
Test
Bemerkungen
5.2 ... Steuerelemente an einen Objektbaum binden?
Klassendiagramm
Klasse CBestellung
Klasse CPerson
Klasse CKunde
Klasse CFirma
Klasse CPersistent
Form1
Test
Anbinden an DataGridView
5.3 ... Detailinformationen mit ListBox/ComboBox anzeigen?
Oberfläche
Quellcode
Test
Bemerkungen
5.4 ... Steuerelemente manuell an ein DataSet binden?
Benutzerschnittstelle
Quellcode
Test
Bemerkungen
Variante mit BindingNavigator
5.5 ... zwei Formulare an eine Datenquelle binden?
Oberfläche
Quellcode Form1
Quellcode Form2
Test
Bemerkungen
5.6 ... mittels ComboBox zwei Tabellen verknüpfen?
Oberfläche
Quellcode
Test
Bemerkungen
5.7 ... ein typisiertes DataSet manuell binden?
Oberfläche
Datenquelle erstellen
Steuerelemente manuell anbinden
ComboBox anbinden
Erster Test
Zweiter Test
Bemerkung
5.8 ... 1:n-Beziehungen per Drag & Drop-Datenbindung anzeigen?
Oberfläche
Datenquelle erstellen
Personal-Eingabemaske per Drag & Drop erzeugen
Datengitter für die Detailtabelle per Drag & Drop erzeugen
Test
Quellcode Form1
5.9 ... die Spalten im DataGridView formatieren?
Oberfläche
Quellcode
Test
Bemerkungen
5.10 ... mit DataReader und ListView arbeiten?
Oberfläche
Quellcode
Test
Bemerkungen
5.11 ... Bilder aus der Datenbank anzeigen?
Oberfläche
Vorbereitungen
Quellcode
Test
Bemerkungen
5.12 ... das DataGridView als Datenbank-Frontend verwenden?
Vorbereitungen
Bedienoberfläche
Statische Klasse CData
Quellcode Form1 (Teil 1)
Formatieren des DataGridView
Quellcode Form1 (Teil 2)
Test
Bemerkungen
5.13 ... Datenbindung unter LINQ to SQL kennen lernen?
Datenkontext
Oberfläche
Quellcode
Test
5.14 ... den DataRepeater für die Anzeige verwenden?
Oberfläche
Quelltext
Test
Bemerkungen
6. Datenbindung – WPF
Das Grundprinzip der Datenbindung
Bindungsarten zwischen Quelle und Ziel
Wann wird die Quelle aktualisiert?
Geht es auch etwas langsamer?
Bindung zur Laufzeit realisieren
Bindung aufheben
Binden an Laufzeit-Objekte
Objekte im Code instanziieren
DataContext – die universelle Alternative zur Source
Verwenden der Instanz im C#-Quellcode
Aktive Datenbindung – Anforderungen an die Quell-Klasse
Instanziieren von Objekten per C#-Code
Datenbindung von Collections
Anforderung an die Collection
Einfache Anzeige
Navigieren zwischen den Objekten
Einfache Anzeige in einer ListBox
Verwendung von DisplayMemberPath
DataTemplates zur Anzeigeformatierung
Mehr zu List- und ComboBox
Selectedlndex
Selectedltem/Selectedltems
SelectedValuePath und SelectedValue
Verwendung der ListView
Einfache Bindung
Sortieren der Einträge
Probleme mit der Datenübernahme
Ein Blick hinter die Kulissen
Navigieren in den Daten
Sortieren
Filtern
Gruppieren
Live Shaping
Die Anzeige von Datenbankinhalten
DataSet
LINQ to SQL
Mapperklassen erzeugen
Die Programm-Oberfläche
Der Zugriff auf die Daten
Optimieren des Datenzugriffs
Entity Framework
EDM erstellen
Oberfläche
Quellcode
Optimierung
Neue Daten einfügen
Formatieren von Werten
IValueConverter
BindingBase.StringFormat-Eigenschaft
Validieren von Nutzereingaben
Validieren per Daten – oder Geschäftsobjekt
Den Fehler optisch darstellen
Wann wird eigentlich validiert?
ValidationRule – die Alternative
Validierungsfehler per Ereignis auswerten
IDataErrorInfo
Änderung am Objekt
Das DataGrid als Universalwerkzeug
Grundlagen der Anzeige
Spalten selbst definieren
Zusatzinformationen in den Zeilen anzeigen
Vom Betrachten zum Editieren
UI-Virtualisierung
How-to-Beispiele
6.1 ... Drag & Drop-Bindung für Master/Detail-Beziehungen umsetzen?
Oberfläche
Quellcode (XAML)
Quellcode (C#)
Test
6.2 ... Collections in Hintergrundthreads füllen?
Oberfläche
Das Problem
Lösung (bis .NET 4.0)
Test
Lösung (ab .NET 4.5)
Test
6.3 ... das MVVM-Pattern am einfachen Beispiel verstehen?
CBuch – unser Model
CBuchViewModel – unser ViewModel
MainWindow – unsere View
Test
Bemerkungen
6.4 ... mit Commands den MVVM-Code optimieren?
CCommand
CBuchViewModel
MainWindow.xaml
Test
Bemerkungen
6.5 ... mit MVVM und Collections arbeiten?
CBuchDB
CBuecherViewModel
MainWindow.xaml
Test
Bemerkungen
Tipps & Tricks
Datenbindung von Null-Values
Fallback-Values zuweisen
Asynchrone Datenbindung von Einzelwerten
Datenbindung an statische Werte
Datenbindung an Settings
7. Microsoft SQL Server-Einstieg
Übersicht
SQL Server LocalDB
Umstellung
Download und Installation
SQL Server Express
SQL Server Compact
Unterschiede SQL Server/SQL Server Express/LocalDB/Jet-Engine
Vergleich Express Edition und Standard SQL Server
Unterschiede Express und LocalDB
Vergleich zur Jet-Engine
Client- versus Fileserver-Programmierung
Die wichtigsten Tools von SQL Server
SQL Server Management Studio
SQLCMD
Query Analyzer (SQL Server Management Studio)
SQL Server Profiler
SQL Server Konfigurationsmanager
Vordefinierte Datenbanken
Einschränkungen
Weitere SQL Server-Funktionen im Kurzüberblick
SQL Server-Agent
Volltextsuche
Reporting Services
Integration Services
Analysis Services
Datenzugriff aus C#
Einrichten der Anbindung (Assistent)
Einrichten der Verbindung (Quellcode)
Datenbanken mit DMO verwalten
SQL Server Management Objects (SMO)
Einbindung
Einführungsbeispiel
Anmelden am Server
Datensicherheit auf dem Microsoft SQL Server
Überblick Sicherheitsmodell
Rollen (Gruppen)
Rechte
Verwalten mit dem SQL Server Management Studio
Erstellen einer neuen Anmeldung
Erstellen von Rollen
Verwalten von Rechten
Verwalten mit T-SQL
Überblick
Erstellen eines neuen Users
Löschen eines Benutzers
Erstellen einer neuen Rolle
Hinzufügen von Usern zu einer Rolle
Verwaltung von Rechten
How-to-Beispiele
7.1 ... den Netzwerkzugriff auf den SQL Server Express aktivieren?
SQL Server Browser aktivieren
TCP/IP-Protokoll aktivieren
Erlaubnis für Remotezugriff überprüfen
Gemischte Anmeldung aktivieren
7.2 ... den SQL Server Express erkennen?
7.3 ... den SQL Server Express administrieren?
7.4 ... alle Nutzer einer Datenbank ermitteln?
7.5 ... alle registrierten Microsoft SQL Server ermitteln?
7.6 ... alle Datenbanken und deren Tabellen ermitteln?
7.7 ... eine Tabelle löschen?
7.8 ... eine Tabelle mit den SMO erzeugen?
7.9 ... die Anzahl der Datensätze beschränken?
Variante 1 (TOP)
Variante 2 (SET ROWCOUNT)
Variante 3 (ROW_NUMBER)
7.10 ... Platzhalterzeichen in T-SQL verwenden?
7.11 ... Teilstrings erzeugen?
7.12 ... mit DROP INDEX jeden Index löschen?
7.13 ... Leerzeichen entfernen?
7.14 ... @@ERROR korrekt verarbeiten?
7.15 ... die Anzahl der Datensätze einer Abfrage bestimmen?
7.16 ... mit Bedingungen Feldinhalte formatieren?
7.17 ... Abfragen mit Platzhaltern beschleunigen?
7.18 ... das Ergebnis einer Stored Procedure speichern?
7.19 ... eine Datenbank umbenennen?
7.20 ... eine Datenbankstruktur kopieren?
7.21 ... eine Datenbank zwischen Servern verschieben?
7.22 ... nach dem Löschen IDENTITY auf 0 setzen?
7.23 ... eine Tabellenspalte umbenennen?
7.24 ... Unterschiede zwischen temporären Tabellen erkennen?
7.25 ... Daten aus verschiedenen Datenbanken anzeigen?
7.26 ... die PRINT-Anweisung in C# anzeigen?
8. Microsoft SQL Server-Programmierung
Praktisches Arbeiten mit dem SQL Server
Erstellen von SQL Server-Datenbanken
Verwenden von SMO
Verwenden von T-SQL
Ergänzungen
Erzeugen und Verwalten von Tabellen
Visual Studio
Indizes
Tabellen erzeugen/verwalten mit T-SQL
Datentypen
Temporäre Tabellen
Tabellen mit SMO erzeugen
Datenbankdiagramme
Erzeugen und Verwenden von Sichten (Views)
Verwenden von T-SQL
Gespeicherte Prozeduren verwenden
Verwenden von Parametern
Resultsets als Rückgabewerte
Output-Parameter
Verwenden des Rückgabewertes
Table Value Parameters (TVP)
Programmierung/Verwendung von Triggern
DDL-Trigger
Trigger-Arten (DML-Trigger)
Gezielte Datensatzauswertung
Auswerten von Spaltenänderungen
Volltextabfragen
Allgemeine Voraussetzungen
Erstellen mit T-SQL
Abfragen von Daten
Ergänzungen/Hinweise
Die Verwendung von FileStream-Storage
FileStream-Storage aktivieren
CONTAINS FILEGROUP
Tabellenlayout
Und wie kommen die Daten in die Tabelle?
FileTable
Einrichten
Zugriff auf das Basisverzeichnis realisieren
Zugriff auf eine Datei/ein Unterverzeichnis realisieren
Massenkopieren
Datenbanken sichern und wiederherstellen
Microsoft SQL Server Management Studio
T-SQL
Backup mit den SMO
Restore mit den SMO
Fehlerbehandlung
Das Fehlermodell
Verwenden von @@ERROR
Verwenden von RAISEERROR
Fehlerbehandlung mit TRY...CATCH
Fehlerbehandlung mit ADO.NET
Weitere Features des Datenzugriffs mit ADO.NET
Alle verfügbaren SQL Server ermitteln
Klassische asynchrone Befehlsausführung
Benachrichtigungen über Datenänderungen
Multiple Active Resultsets (MARS)
CLR-Integration im SQL Server
Grundsätzlicher Ablauf
CLR-Unterstützung aktivieren
Assembly erstellen
Ein erstes Beispiel
Benutzerdefinierte Funktionen (UDF)
Stored Procedures
Parameter/Rückgabewerte
Die aktuelle Verbindung für den Datenzugriff nutzen
Eigenes Resultset erzeugen
Aggregat-Funktionen
Trigger in C# realisieren
Mehr Sicherheit
Fazit
XML-Unterstützung
Der XML-Datentyp
XML-Daten mit SELECT erzeugen
ROOT erzeugen
PATH
ELEMENTS
Hierarchische Daten abfragen
Schema erzeugen
XML-Abfragen
Query
Exist
Value
Der Clientzugriff auf die XML-Daten
How-to-Beispiele
8.1 ... Aktualisierungs- und Löschweitergaben realisieren?
8.2 ... Änderungen in Tabellen protokollieren?
8.3 ... SQL-Anweisungen debuggen?
Debugging im Visual Studio 2012
SQL Server Profiler
8.4 ... ein SqlConnection-Objekt konfigurieren?
Oberfläche
Variante 1: Connectionstring hart kodieren
Variante 2: Connectionstring in der Anwendungskonfigurationsdatei hinterlegen
Variante 3: Eine Datenbankdatei (.mdf) verwenden
Verbindung zum SQL Server herstellen
Test
Bemerkungen
8.5 ... eine gespeicherte Prozedur aufrufen?
Oberfläche
Quellcode
Test
Bemerkungen
8.6 ... mit Table Value-Parametern arbeiten?
Vorarbeiten auf dem SQL Server
Oberfläche (Client)
Quellcode
Test
8.7 ... mit Stapel-Abfragen arbeiten?
Oberfläche
Quellcode
Test
Bemerkung
8.8 ... Query Notifications einrichten und auswerten?
Prinzip
Oberfläche
Quellcode
Test
Ärger mit dem SQL Server Service Broker
Hilfsclient zum Datenbank-Update
8.9 ... die MARS-Technologie kennen lernen?
Oberfläche
Quellcode (ohne MARS)
Quellcode (mit MARS)
Quellcode (für Kontrollanzeige)
Test
Bemerkungen
8.10 ... Row-Constructors verwenden?
9. SQL Server Compact
Einsatzszenarien
Einschränkungen
Die »tolle« neue Version 4.0
Fähigkeiten/Vorteile
Installation
Books Online
SQL Server Compact 3.5 SP2
SQL Server Compact Toolbox
Weitere Downloads
Datenbanken erstellen, verwalten und einbinden
Visual Studio
SQL Server Management Studio
Codebasiert mit C#
Zusätzliche Parameter im Connectionstring
Tabellen und Referenzen erstellen
Zusammenarbeit mit dem DataSet
Datenzugriff mit SqlCeResultSet
Datenbindung
Das ResultSet konfigurieren
Datensätze löschen
Datensätze einfügen
Datensätze bearbeiten
Navigation zwischen den Datensätzen
Zugriff mit LINQ to SQL
Anbinden einer vorhandenen Datenbank
Erstellen einer neue Datenbank
Ergänzungen
Zugriff per Entity Data Model
Der Einsatz als Local Database Cache
Beispiel Einweg-Synchronisation
Starten des Synchronisierungsprozesses in einer Anwendung
Bidirektionale Synchronisation
Anzeige von Statusänderungen
Tipps & Tricks
Migration von Version 3.5 auf 4.0
Datenbank auf Remotelaufwerk nutzen
Performance verbessern
Datenbank von schreibgeschütztem Medium starten
Datenbankinformationen abrufen
Datenbank reparieren
Datenbank komprimieren
Compact
Shrink/Autoshrink
Datenbank nachträglich verschlüsseln
Ein Datenbank-Backup realisieren
Fehler in der Visual Studio-IDE vermeiden
Distribution
Distribution SQL Server Compact 3.5
Distribution SQL Server Compact 4.0
Fazit
10. SQLite — ein Mini ganz groß
Was ist eigentlich SQLite?
Vorteile
Nachteile
Vorbereitungen
Download/Installation
Integration in Ihr C#-Projekt
Datenbank-Tools
Verwalten von SQLite-Datenbanken mit Visual Studio
Database .NET
SQLite Administrator
Praktische Aufgabenstellungen
Datenbank/Datenbankobjekte per Code erstellen
Mögliche Connectionstring-Parameter
Tabellen erzeugen
Bitte umlernen – Datentypen einmal anders
Einschränkungen definieren
Datenbankzugriff per DataSet realisieren
Besonderheit: InMemory-Datenbank
Datenzugriff mit dem Entity Framework
Die Bedeutung von Transaktionen bei SQLite
SOUNDEX verwenden
Volltextabfragen realisieren
Eigene skalare Funktionen in C# realisieren
Eigene Aggregat-Funktionen in C# realisieren
SQLite – die Datenbank für Windows Store Apps
Installation in einem WinRT-Projekt
Erstellen der Datenbank
Daten einfügen, lesen und abfragen
Tipps & Tricks
Für Liebhaber der Kommandozeile – Sqlite3.exe
Eine SQLite-Datenbank reparieren
Eine Beispieldatenbank herunterladen
Eine Datenbank ver- und entschlüsseln
Eine verschlüsselte Datenbank öffnen
Die Datenbank defragmentieren
Mehrere Datenbanken verknüpfen
Testen, ob eine Tabelle vorhanden ist
Eine Abfrage/Tabelle kopieren
Backup/Restore implementieren
Tabellen zwischen Datenbanken kopieren
Ersatz für TOP
Metadaten auswerten
Timestamp als Defaultwert verwenden
Export in XML-Format
Fazit
11. Datenbanken in der Cloud
Einführung in SQL Azure-Datenbanken
Das Grundprinzip der »Webdatenbank«
Der Azure-Server
Einschränkungen
Features
Die Frage nach den Kosten
Einrichten des Servers
Die zentrale Organisationsstruktur
Einen Server und eine Datenbank erstellen
IP-Filter konfigurieren
Bemerkungen zum neu erstellten Account
Die drei konzeptionellen Zugriffsmodelle
Code-Far-Modell
Code-Near-Modell
Misch-Variante
Administrieren von Azure SQL-Datenbanken
Zugriff mit dem SQL Server Management Studio
Weitere Accounts erstellen
Neuen Login-Account erzeugen
Neuen Datenbank-Nutzer erzeugen
Zuweisen von Rechten
Lokalen Datenbanken mit dem Management Studio migrieren
Visual Studio 2012 als Management-Tool
Praktische Umsetzung in einer C#-Anwendung
Verbindung aufbauen
Datenbank erstellen
Ist die Datenbank schon vorhanden?
Den aktuellen »Füllstand« abrufen
Was passiert wenn die Datenbank zu klein wird?
Eine Datenbankkopie erstellen
Tabelle(n) erstellen
Daten schreiben/lesen
Asynchrone Ausführung
Einfügen großer Datenmengen
Lesen der Daten
Stored Procedures
Implementieren einer temporären Fehlerbehandlung
Abschließende Hinweise
Synchronisieren
Performance-Tipps
Die Firewall per T-SQL konfigurieren
Arbeiten mit sqlcmd
Migrieren von Access-Datenbanken
12. Arbeiten mit dem Entity Framework
Das Grundkonzept
Konzeptionelle Schicht
Logische Schicht
Zuordnungsschicht
Wie erstelle ich die Schema-Dateien?
Das Gesamtmodell im Überblick
Wie kann mit dem EDM gearbeitet werden?
EntityClient
Objektdienste
Die Entwurfsmöglichkeiten im Überblick
Database-First
Model-First
Code-First
Noch ein Wort zur Code-Erzeugung
Überblick zu den Neuigkeiten für Umsteiger
Entity Framework 5
Entity Framework 6
Der Database-First/Model-First-Entwurf
Unsere Beispieldatenbank
Das Datendiagramm
Tabelle TestTabelle
Tabelle Fahrzeuge
Der EDM-Assistent
Der EDM-Designer
Zuordnungsdetails
Eigenschaftenfenster
Zuordnen von Stored Procedures
Weitere Fenster des EDM-Designers
Klassenansicht
Modellbrowser
Stored Procedures importieren
Komplexe Typen
Verwendung von Enums
Die erzeugten Klassen/partielle Klassen
Aktualisieren des Models
Besonderheit des Model-First-Entwurfs
Code-First – Ein erster Einstieg
Vom Code zur Datenbank – unser erster Versuch
Wir machen es besser und nutzen Annotations
Festlegen der Zieldatenbank
Entity Framework Power Tools
Einsatz des EntityClient für die Datenabfrage
Ein Überblick
Einsatzbeispiel
Connection aufbauen
Parameterabfragen realisieren
Wann sollten Sie diese Variante nutzen?
Verwenden der Objektdienste
Eine Übersicht
Verwendung von eSQL
Verwendung von LINQ to Entities
Kurzeinführung in Entity SQL (eSQL)
Für den Umsteiger: Unterschiede zu T-SQL
Für den Einsteiger
Kommentare
Zeichenketten
Datum-/Zeitangaben
Zahlen
Parameter
Projektion
Sortieren
Gruppieren
Filtern
Beschränken
Paging
UNION
Verwendung von Aggregat-Funktionen
Zugriff auf Detaildaten
Praktisches Arbeiten mit dem EDM
Skalare Werte abfragen
Abfragen mit Projektion
Detaildaten/Verwendung der Navigationseigenschaften
Lazy Loading
Wie funktioniert das explizite Laden?
Was passiert beim vorzeitigen Laden (Eager-Load)?
Delay Loaded
Zugriff mit Paging
Abrufen einzelner Entitäten
Single/First
SingleOrDefault/FirstOrDefault
Find (GetObjectByKey)
Lokale Datenaktualisierung per DbContext
Einfaches Einfügen von Datensätzen
Abrufen eines Identity-Wertes nach dem Einfügen
Einfügen von Datensätzen in 1:n/m:n-Beziehungen
Bearbeiten von Entitäten
Übernahme der Daten mit SaveChanges
Lösung per ObjectContext
Lösung per DbContext
Löschen von Entitäten
Verwendung von Stored Procedures
Komplexe Typen
Skalare Rückgabewerte
Table-Valued Functions (TVFs)
Funktionsimporte
Verwenden des ChangeTrackers
Anhängen von Objekten
Arbeiten mit Vererbung
Arbeit mit dem Designer
Verwendung der Vererbung
Validierung
Verwenden der partiellen Klassen
DbContext erweitern
Entitäts-Konstruktoren überladen
Eigene Eigenschaften und Methoden realisieren
Abschließender Hinweis
How-to-Beispiele
12.1 ... den ConnectionString anpassen?
12.2 ... ChangeTracking deaktivieren?
12.3 ... Objekt per Schlüssel löschen, ohne diese zu laden?
12.4 ... LINQPad verwenden?
Download/Installation
Anbinden Ihres Objektmodells
Beispiel eSQL
12.5 ... die Entity Framework Extended Library verwenden?
12.6 ... SQL-Anweisungen analysieren?
12.7 ... direkte SQL-Statements an den Server absetzen?
13. Reporting Services
Übersicht
Report Designer
Report Viewer
Eigenschaften
Betriebsarten
Wichtige Änderungen gegenüber der Vorgängerversion
Einführungsbeispiele
Der erste Bericht – so einfach geht das!
Datenquelle erzeugen
Report entwerfen
Report mit ReportViewer verbinden
Bemerkungen
Ein zweiter Bericht – weg mit dem Assistenten!
Vorbereitungen
Bericht entwerfen
ReportViewer anbinden
Test
Bemerkungen
Unsere Werkzeuge für den Berichtsentwurf
Oberfläche des Report-Designers
Textkörper
Kopfzeile und Fußzeile
Werkzeugkasten
Beschreibung
Wichtige Hinweise zur Programmierung
Bericht-Menü
Berichtseigenschaften
Kopf-/Fusszeile ein-/ausblenden
Gruppierung
Berichtsdaten-Fenster
Integrierte Felder
Berichtsparameter
Eingebettete Bilder
DataSets
Programmieren mit Visual Basic
Konstanten
Integrierte Felder
Parameter
Felder und DataSets
Variablen
Operatoren
Allgemeine Funktionen
Sortieren, Gruppieren und Filtern von Datensätzen
Vorbereitungen
Sortieren
Gruppieren
Filtern
Kreuztabellenberichte
Einfache Matrix
Zeilen- und Spaltensummen anzeigen
Zusätzliche berechnete Spalten einfügen
Matrix mit zwei Zeilengruppen
Bilder im Bericht anzeigen
Ein Bild einbetten
Bilder aus einer Datenbank
Externe Bilder
Hintergrundbilder
Diagramme darstellen
Diagrammtypen
Säulendiagramm
Weitere Gruppen hinzufügen
Weitere Diagramme
Parameter anwenden
Parameterdefinition
Allgemein
Verfügbare Werte
Standardwerte
Einbau von Parametern in den Berichtsentwurf
Parameter direkt eintragen
Parameter mit Ausdruck-Editor zuweisen
Parameterwerte an Bericht übergeben
Allgemeine Syntax
Parameterübergabe
Berichtsvariablen
Master-Detail-Reports
Subreports
Eingebettete Datenregionen
Noch mehr Reporting
Hyperlink realisieren
Verwenden von ReportViewer-Ereignissen
Drillthrough-Event
Hyperlink-Event
Hinzufügen von benutzerdefiniertem Code
Variante 1: Eingebetteter Visual Basic-Code
Variante 2: Benutzerdefinierte Assembly
Ergänzungen zum ReportViewer
Local Mode versus Server Mode
RDL- versus RDLC-Format
Übersicht Datenbindung
Anbindung DataSet
Anbindung Objekte (LINQ to SQL, Entity Framework, Webdienste)
How-to-Beispiele
13.1 ... einen Bericht mit dem Berichtsassistenten erstellen?
Vorbereitung
Reportentwurf mit Assistent
Anzeige per ReportViewer
13.2 ... einen Unterbericht einsetzen?
Datenquelle erstellen
Unterbericht entwerfen
Parameter und Filter zum Unterbericht hinzufügen
Hauptbericht entwerfen
ReportViewer anbinden
Test
13.3 ... eine Rechnung anzeigen?
Datenquelle erstellen
Report entwerfen
Test
Bemerkungen
Böse – ein Bug im Report Designer
13.4 ... das Drillthrough-Event behandeln?
Detail-Report vorbereiten
Master-Report vorbereiten
ReportViewer mit Master-Report verbinden
Drillthrough-Event auswerten
Test
13.5 ... das Messgerät zur Anzeige nutzen?
Vorbereitung
Reportentwurf
Anzeige
14. Das Microsoft Chart-Control
Allgemeine Chart-Features
Serien/Reihen und Datenpunkte direkt erzeugen
Den Diagrammtyp ändern
3D-Darstellung
Farben für Serien und Datenpunkte
Farbpalette auswählen
Benutzerdefinierte Paletten
Color-Eigenschaft
Leere Datenpunkte
Diagramm drucken
Diagramm exportieren/abspeichern
Einführung in die Chart-Datenbindung
Manuelle Datenbindung mittels Points.AddXY-Methode
Übersicht über die speziellen Datenbindungsmethoden
Unterstützte Datenquellen
Spezielle Chart-Datenbindungsmethoden
Die DataBindTable-Methode
DataBind-Methode/DataSource-Eigenschaft
Die DataBindCrossTable-Methode
Die Points.DataBind-Methode
Die Points.DataBind(X)Y-Methoden
Points.DataBindXY
Points.DataBindY
How-to-Beispiele
14.1 ... das Chart-Control zur Laufzeit mit Daten füllen?
Dataset entwerfen
Oberfläche
Quelltext
Test
14.2 ... das Chart mit einer LINQ to SQL-Abfrage verbinden?
Oberfläche
Quelltext
Test
14.3 ... mit ASP.NET und Entity Framework ein Diagramm anzeigen?
Oberfläche
Datenzugriff realisieren
Quelltext
Test
15. Access-Datenbanken
Ein erster Blick auf Microsoft Access-Datenbanken
Warum Access?
Access-Datentypen
Beschränkungen
Der Zugriff aus C#
Warum nicht nur ADO.NET?
Die ADOX-Library
Die wichtigsten Objekte auf einen Blick
Die JRO-Library
ADO MD
Einbinden von ADOX und JRO in C#
Parameter für ADO.NET-Connectionstrings
Access- Daten ban kpasswort
Access-Datenbanksicherheit (Benutzer-/Gruppenebene)
Datenbankzugriff auf schreibgeschützte Medien (CD, DVD)
Datenbanken erstellen
Die Create-Methode
Weitere Parameter
Jet-spezifische Optionen
Tabellen/Indizes erstellen/verwalten
Tabellendefinition
Indexdefinition
Erstellen von Prozeduren und Sichten
Tabellen verknüpfen (Relationen)
Zugriffsschutz in Access-Datenbanken
Grundlagen
Sichern auf Datenbankebene
Erstellen neuer Benutzer und Gruppen
Vergabe von Rechten
Verschlüsseln von Datenbanken
Einbinden externer Tabellen
Erstellen einer Verbindung
Aktualisieren einer Verbindung
Löschen einer Verbindung
Replizieren von Datenbanken
Datenbankanalyse
Verwendung von GetSchema
Welche Informationen können abgerufen werden?
Welche Einschränkungen können verwendet werden?
Datenbankeigenschaften mit ADOX ermitteln
Tabellen mit ADOX bestimmen
Sichten/Abfragen mit ADOX bestimmen
Parameterabfragen (Procedures)
Nutzer und Nutzergruppen auslesen
Nutzer- und Gruppenberechtigungen ermitteln
Weitere Aufgabenstellungen
Access-Datenbanken reparieren/komprimieren
Distribution von Access-Datenbanken
Access 2007-Datenbanken
Zugriff auf die Datenbanken
Neuer Connectionstring
Übersicht neue Datentypen
Arbeiten mit den DAOs
Memofeld mit Archiv-Funktion
Erzeugen per Access-Editor
Erzeugen per DAO-Code
Zugriff auf das History-Feld
Anlage-Feld
Erzeugen per DAO-Code
Dateien im Anlage-Feld speichern
Informationen über die Anlagen abrufen
SQL und Anlagefelder
Rich-Text-Feld
Erzeugen per DAO-Code
Multivalue-Feld (MVF)
Erzeugen per Access-Editor
Bemerkungen
Access 2010-/2013-Datenbanken
Download/Installation Access 2010 Database Engine
Berechnete Spalten
Tabelle erzeugen
Tabelle in C# verwenden
Trigger/Datenmakros
Trigger erzeugen
Tabelle in C# verwenden
Unterschiede Access 2007/2010/2013
How-to-Beispiele
15.1 ... ADO installieren?
15.2 ... Access-Datenbanken exklusiv öffnen?
15.3 ... die Zugriffsgeschwindigkeit auf Access-Datenbanken erhöhen?
15.4 ... Access-Datenbanken im Netzwerk verwenden?
15.5 ... alle aktiven Verbindungen zur Datenbank auflisten?
15.6 ... eine Spalte mit eindeutigen Zufallswerten erzeugen?
15.7 ... das Datenbank-Kennwort ändern?
Datenbankpasswort
Nutzerpasswort
15.8 ... Abfragen über mehrere Datenbanken realisieren?
15.9 ... die Beschreibung von Datenbankfeldern abrufen?
15.10 ... ohne Access auf Access-Datenbanken zugreifen?
16. Jet-SQL in Theorie und Praxis
Einführung
Kategorien von SQL-Anweisungen
Datendefinition
Datenabfrage
Datenmanipulation
Zugriffskontrolle
Testprogramm und Beispieldatenbank
Hinweise zur Bedienung
Unsere Beispieldatenbank im Überblick
Alternative Varianten für die SQL-Abfrage
Microsoft Access
ADO Query
Bemerkungen
Daten abfragen
Abfragen mit SELECT
Alle Spalten auswählen
Auswahl der Spalten
Filtern
Suche in einem Bereich
Suche nach Zeichenfolgen
Datumsvergleich
Probleme mit Datums-/Uhrzeitvergleichen
IN-Klausel
Auf der Suche nach dem Nichts
Beschränken der Ergebnismenge
Eindeutige Records/doppelte Datensätze
Tabellen verknüpfen
Verknüpfen mit LEFT-JOIN/RIGHT-JOIN
Verknüpfen mit INNER JOIN
Auto-JOIN
Tabellen vereinigen
Datensätze sortieren
Datensätze gruppieren
Die HAVING-Klausel
Unterabfragen
Das Ergebnis einer Query ist Bedingung (WHERE) einer anderen Query
Liefert die Subquery eine Menge von Werten, müssen Sie mit ANY/ALL einen dieser Werte auswählen.
»=ANY« kann durch »IN« ersetzt werden ( »< >ALL« entspricht »NOT IN«)
Eine WHERE-Klausel kann mehrere Subqueries enthalten
Synchronisieren von Unterabfragen mit der Hauptabfrage
Daten manipulieren
Einfügen einzelner Datensätze
Einfügen von Abfragedaten
Exportieren/Importieren von Abfragedaten
Speichern in externen Tabellen
Aktualisieren/Ändern
Löschen
Bemerkungen
Erweiterte Jet-SQL-Funktionen
Berechnete/Formatierte Spalten
Format-Funktion
Berechnungen in Spalten
Neue Spalten erzeugen
Weitere String-Formatierungsfunktionen
Berechnungsfunktionen
NULL-Werte
Datum und Zeit in SQL-Abfragen
Datumsberechnungen
DateValue
Datentypumwandlungen
Kreuztabellenabfragen
Datenbankverwaltung mit Jet-SQL (DDL)
Datenbanken
Tabellen
Indizes
CONSTRAINT-Klausel
Beziehungen festlegen
CREATE INDEX
Tabellen/Indizes löschen oder verändern
Sichten (Views)
Nutzer- und Rechteverwaltung
Datenbankpasswort ändern
User erzeugen/löschen
User neues Passwort zuweisen
Gruppe erzeugen/löschen
Nutzer zu Gruppe hinzufügen/entfernen
Rechte zuweisen/entziehen
Datenbankentwurf optimieren
Indizes
Abfrageoptimierung
Weitere Möglichkeiten
Jet-SQL in der C#-Praxis
Ausführen oder abfragen?
Einfügen von Strings zur Laufzeit
Datumseingabe
Parameterübergabe
Parameter für OleDbCommand
How-to-Beispiele
16.1 ... nach einem INSERT das Zählerfeld abfragen?
16.2 ... die Anzahl der Datensätze ermitteln?
16.3 ... Datumsteile in SQL zur Suche nutzen?
16.4 ... die Groß-/Kleinschreibung berücksichtigen?
16.5 ... WITH OWNERACCESS OPTION verwenden?
16.6 ... Datensätze richtig verknüpfen?
16.7 ... doppelte Datensätze aus einer Tabelle löschen?
Temporäre Tabelle
Eindeutiges Feld
16.8 ... die IFF-Funktion einsetzen?
16.9 ... ein einfaches SQL-Abfrageprogramm erstellen?
Oberfläche
Quelltext
Test
16.10 ... Aggregatfunktionen auswerten?
Oberfläche
Quellcode
Test
Bemerkungen
16.11 ... die Access 2007-Datenbankfeatures unterstützen?
Übersichten
Unterschiede ANSI-SQL und Access-SQL
Die wichtigsten SQL-Befehle
17. T-SQL in Theorie und Praxis
Einführung
Kategorien von SQL-Anweisungen
Datendefinition
Datenabfrage
Datenmanipulation
Zugriffskontrolle
Schreibweise
Kommentare
Zeichenketten
Variablen deklarieren/verwenden
Bedingungen mit IF/ELSE auswerten
Verwenden von CASE
CHOOSE
Verwenden von WHILE ... BREAK/CONTINUE
Datum und Uhrzeit in T-SQL
Verwenden von GOTO
Fehlerbehandlung
Testprogramm und Beispieldatenbank
Hinweise zur Bedienung
Unsere Beispieldatenbank im Überblick
Alternative Varianten für die SQL-Abfrage
SQL Server Management Studio
Visual Studio
ADO Query
Bemerkungen
Daten abfragen
Abfragen mit SELECT
Alle Spalten auswählen
Auswahl der Spalten
Filtern
Suche in einem Bereich
Suche nach Zeichenfolgen
Datumsvergleich
Probleme mit Datums-/Uhrzeitvergleichen
IN-Klausel