If you can't read please download the document
Upload
leminh
View
219
Download
0
Embed Size (px)
Citation preview
Datenbank-Programmierung mit Visual C# 2012 (Buch + E-Book)
Grundlagen, Rezepte, Anwendungsbeispiele
vonWalter Doberenz, Thomas Gewinnus
1. Auflage
Datenbank-Programmierung mit Visual C# 2012 (Buch + E-Book) Doberenz / Gewinnus
schnell und portofrei erhltlich bei beck-shop.de DIE FACHBUCHHANDLUNG
Thematische Gliederung:
Microsoft Programmierung
Microsoft 2013
Verlag C.H. Beck im Internet:www.beck.de
ISBN 978 3 86645 466 8
Inhaltsverzeichnis: Datenbank-Programmierung mit Visual C# 2012 (Buch + E-Book) Doberenz / Gewinnus
10 SQLite ein Mini ganz gro
Kapitel 10
SQLite ein Mini ganz gro
667
In diesem Kapitel:
Was ist eigentlich SQLite? 668
Vorbereitungen 670
Datenbank-Tools 672
Praktische Aufgabenstellungen 677
SQLite die Datenbank fr Windows Store Apps 695
Tipps & Tricks 703
Fazit 715
H IN W EIS
W W W
Kapitel 10: SQLite ein Mini ganz gro
In diesem Kapitel wollen wir Ihnen eine sinnvolle Alternative sowohl fr den meist berdimensioniertenEinsatz des Microsoft SQL Servers, egal ob Express oder LocalDB, als auch fr die Verwendung von Micro-soft Access-Datenbanken als lokale Datenspeicher vorstellen.
Die Hauptforderungen nach
einfacher Installation/Distribution
Untersttzung bekannter Technologien (ADO.NET, LINQ to SQL, Entity Framework)
Aufhebung der Restriktionen bezglich der maximalen Datenbankgre1
Untersttzung fr Datenbindung
gute Performance
Plattformunabhngigkeit des Datenformats
und, last but not least, die Datensicherheit
werden von dem im Folgenden vorgestellten SQLite in jedem Fall erfllt. Das hat mittlerweile auch Micro-soft erkannt SQLite fungiert neuerdings als Mini-Datenbank fr die Windows Store Apps2. Grund fr die-sen Rckgriff auf eine externe Lsung ist der gnzliche Mangel an hauseigener Datenbankuntersttzung frdiese Apps, die vorhandene IndexedDB ist fr C#-Apps derzeit nicht nutzbar.
Wir beschrnken uns an dieser Stelle ganz bewusst auf lokale Datenspeicher, viele Anwendungen erfordernnach wie vor keine Server-Infrastruktur und werden mit viel zu viel Ballast (zustzliche Dienste, Probleme mit UAC, Daten-sicherung etc.) beim Kunden abgeworfen. Administratoren und Anwender sind Ihnen sicher dankbar dafr, wenn Sie eineeinfach installierbare Anwendung anbieten, die nicht gleich das gesamte System umgrbt, um ein paar Datenstze zuspeichern. Vielfach reicht auch schon eine XML-Datei, aber das ist eine andere Geschichte.
Was ist eigentlich SQLite?Bei SQLite handelt es sich um eine Desktop-Datenbankengine, die im Gegensatz zum SQL Server ohne eineextra Server-Anwendung auskommt. Die komplette Funktionalitt wird von einer DLL bereitgestellt, dieAnwendung greift direkt auf den eigentlichen Datenspeicher zu. Der Clou an dieser Lsung: Sie knnentrotz allem mit SQL als Abfragesprache arbeiten, mssen sich also nicht erst an eine neue Schnittstellegewhnen3.
Einen grundstzlichen berblick zum Datenformat, zur verwendeten SQL-Syntax und zur DLL-Schnitt-stelle bietet Ihnen die folgende Website
http://www.sqlite.org/
1 Insbesondere dieser Punkt drfte fr viele Programmierer von Interesse sein, ist doch das Datenlimit von 2 GByte bei Access-Daten-banken nicht mehr zeitgem.
2 Zumindest so lange, bis Microsoft endlich eine eigen Lsung auf die Beine gestellt hat.
3 Am besten knnen Sie SQLite noch mit dem SQL Server Compact vergleichen, beide haben einen konzeptionell hnlichen Ansatz.
668
H IN W EIS
Im Folgenden wollen wir Ihnen mit einer unverbindlichen Gegenberstellung der Vor- und Nachteile dieEntscheidung fr oder gegen SQLite erleichtern.
VorteileDavon bietet SQLite jede Menge:
Die Datenbankengine ist winzig im Vergleich zu den etablierten Produkten (die DLL hat lediglich eineGre von ungefhr 1 MB).
Es ist keinerlei administrativer Aufwand notwendig, wenn Sie mal vom Speichern der eigentlichenDatendatei absehen.
Das Format ist ideal fr die Verwendung im Zusammenhang mit dem Compact Framework, da geringerRessourcenbedarf.
Alle Daten sind in einer Datei zusammengefasst, endlose Dateilisten, wie bei dBase oder Paradox, sindnicht zu befrchten.
Die komplette Engine befindet sich in einer bzw. zwei Dateien (Compact Framework).
SQLite implementiert eine Groteil der SQL92-Spezifikation, Sie knnen also Ihre SQL-Know-Howweiter nutzen und mssen nicht umlernen.
SQLite-Datenbanken sind plattformkompatibel, d.h., Sie knnen die Datei problemlos mit anderen Sys-temen auslesen und bearbeiten. Fr fast jede Plattform und Programmiersprache werden entsprechendeSchnittstellen angeboten. Dies ist im Zusammenhang mit dem Datenaustausch zu Android- und iOS-Anwendungen interessant.
SQLite ist in einigen Punkten schneller1 als eine entsprechende SQL Server Compact-Datenbank und dieDateien sind kleiner. Im Gegensatz zum SQL Server Compact kann man bei einer maximalen Daten-bankgre von 2 Terabyte kaum noch von einer Grenbegrenzung sprechen.
Datenbanken knnen verschlsselt werden.
Untersttzung fr Trigger, Views und Constraints.
SQLite untersttzt verschiedene Formen der Volltextsuche, ein Feature, auf das wir z.B. bei Access-Datenbanken schon lange warten.
Es sind ADO.NET 2.0 Provider verfgbar, auch die Verwendung des Entity Frameworks ist mglich.
Optional ist auch ein Zugriff per ODBC-Treiber mglich.
SQLite ist komplett kostenlos, der Quellcode ist ebenfalls verfgbar.
SQLite ist eine der wenigen Datenbankengines, die Sie derzeit in einer WinRT-App berhaupt zumLaufen bekommen.
Insbesondere der letzte Punkt ist ein echtes Killerfeature, wir gehen ab Seite 695 auf die spezifische Lsungim Rahmen von WinRT ein.
1 Hier kommt es jedoch auf eine sinnvolle Indizierung der Tabellen an, andernfalls bricht die Performance recht schnell ein.
669Was ist eigentlich SQLite?
W W W
H IN W EIS
Kapitel 10: SQLite ein Mini ganz gro
NachteileJede Medaille hat zwei Seiten und so mssen Sie auch bei SQLite mit einigen Einschrnkungen und Nach-teilen leben.
Grundstzlich sollten Sie immer das Konzept als Desktop-Datenbank im Auge behalten. Sie knnenzwar mit mehreren Anwendungen auf die Datendatei zugreifen, allerdings ist der Schreibmechanismusder Engine etwas eigenwillig, nur ein Prozess kann exklusiv auf die Datenbank zugreifen, Lesezugriffewerden in dieser Zeit geblockt.
Keine Untersttzung fr Stored Procedures und UDFs, Sie knnen jedoch eigene Scalar- und Aggre-gat-Funktionen schreiben, die als Callback in Ihrer Anwendung abgelegt sind.
Es sind keine geschachtelten Transaktionen mglich.
Keine direkte Replikationsuntersttzung, Sie knnen jedoch eine zweite Datenbank mit ATTACH ein-binden und nachfolgend die Daten mit einer Abfrage ber die betreffenden Tabellen synchronisieren.
Keine Untersttzung fr Nutzer- und Rechteverwaltung, es handelt sich um eine Desktop-Datenbank,die Sie jedoch verschlsseln knnen.
VorbereitungenHaben Sie sich fr SQLite als Datenformat entschieden, ist der nchste Schritt die Auswahl eines geeignetenDatenproviders, der uns auch unter .NET wie gewohnt zur Verfgung steht.
Download/InstallationDie Autoren haben sich in diesem Fall fr System.Data.SQLite, einen kostenlosen Wrapper und ADO-.NET 2.0/3.5-Provider, entschieden, da dieser sehr gut dokumentiert und auch aktuell ist. Ganz nebenbei istauch eine entsprechende Integration in Visual Studio vorhanden. Sie knnen also die Datenbanken, wievom Microsoft SQL Server gewohnt, in der Visual Studio-IDE bearbeiten und abfragen (Server-Explorer).
Herunterladen knnen Sie die Installation unter der Adresse:
http://system.data.sqlite.org/
Laden Sie das Setup for 32-bit Windows (.NET Framework 4.5) herunter, wenn Sie ber Visual Studio 2012verfgen, fr Visual Studio 2010 nutzen Sie das Setup for 32-bit Windows (.NET Framework 4.0).
Achten Sie darauf, fr welche Framework-Version Sie die Installation herunterladen!
Nach dem Download fhren Sie das Setup-Programm aus, um die Designtime-Untersttzung in Visual Stu-dio zu integrieren.
Die Besonderheit dieses Projekts ist eine Untersttzung sowohl fr das komplette, als auch fr das Com-pact-Framework. Arbeiten Sie mit dem normalen Framework, wird fr Ihr Projekt bzw. das Zielsystemlediglich die Datei System.Data.SQLite.DLL bentigt, in dieser befindet sich die SQLite-Engine und der fr
670
H IN W EIS
W W W
uns wichtige .NET-Wrapper. Fr den Einsatz mit dem Compact Framework mssen Sie die Dateien Sys-tem.Data.-SQLite.DLL (Unterordner \\CompactFramework) und SQLite.Interop.066.DLL auf dem Zielsys-tem bereitstellen.
System.Data.SQLite ist lediglich ein .NET-Wrapper fr die originale SQLite-Engine (aktuell 3.7.15.2), Sieprofitieren also auch automatisch von Verbesserungen und Neuerungen an der SQLite-Engine.
Mehr ber die SQLite-Engine erfahren Sie unter folgender Adresse:
http://www.sqlite.org/docs.html
Integration in Ihr C#-ProjektMchten Sie den Provider in Ihr Projekt integrieren, fgen Sie zunchst einen Verweis auf die AssemblySystem.Data.SQLite hinzu und legen die Eigenschaft Lokale Kopie auf True fest. Bentigen Sie zustzlichauch Untersttzung fr LINQ, fgen Sie noch die Assembly System.Data.SQLite.Linq hinzu.
Der einfachste Weg zur Integration in Ihr C#-Projekt fhrt jedoch ber den NuGet-Manager. Whlen Sieeines der vier mglichen Pakete und klicken Sie auf Installieren:
Abbildung 10.1 Installation per NuGet-Paket
Sollten Sie das Paket System.Data.SQLite (x86/x64) gewhlt haben, werden Ihrem Projekt zwei Unterver-zeichnisse x86 und x64 hinzugefgt, in denen jeweils die plattformspezifische SQLite.Intero