C#: SQLite Datenbank einbinden und nutzen (auch für SharpDevelop)

SQLite ist eine dateibasierte Datenbank, welche Sie mit SQL Befehlen (wie mySQL, MS SQL, usw.) verwalten können.

Installation

  • Laden Sie sich die benötigte Komponente herunter:
    ADO.NET 2.0 Provider for SQLite
  • Starten Sie das heruntergeladene Setup und folgen Sie den Installationsanweisungen

Vorbereitungen für Ihr C# Projekt

Sie können die nun installierten ADO.NET SQLite Komponenten nutzen. zur Vereinfachung sollten Sie die benötigten Libraries (DLLs) in Ihren Projektordner kopieren:

  • Öffnen Sie den Ordner “C:\Programme\SQLite.NET\bin”
  • Markieren Sie die benötigte .DLL Datei zum Kopieren.
    Welche Datei Sie in Ihrem Fall brauchen, hängt von Ihrem eingesetzten System ab (I386, AMD64, …).
    Für eine Standardumgebung (Windows 32-Bit System) nutze ich die “System.Data.SQLite.dll”.
  • Öffnen Sie den Ordner “bin\Debug” Ordner in Ihrem Projektverzeichnis.
    In diesem Beispiel nutze ich den Projektnamen “HalloWelt”.
    Im Beispiel ist der Projektordner “C:\tmp\HalloWelt\bin\Debug”
  • Fügen Sie die ausgewählten Dateien ein

In SharpDevelop die DLL als Referenz hinzufügen

  • Zur Projektansicht wechseln (Strg + Alt + L)
  • In Ihrem Projekt den Untereintrag “Referenzen” mit der rechten Maustaste anklicken
  • “Referenz hinzufügen” auswählen und anklicken
  • Den Reiter “.NET Assemblybrowser” auswählen
  • Auf den Button “Suchen” klicken
  • Ihren Projektordner öffnen und die gerade hineinkopierte DLL auswählen
  • “OK” anklicken
    Das Fenster schließt sich und die DLL ist im Bereich “Gewählte Referenzen” zu finden
  • “OK” anklicken
    Die DLL ist in Ihrer Projektliste aufgeführt

SQLite Unterstützung im Projekt einbinden

  • Fügen Sie die folgende Zeile am Anfang Ihrer .CS Datei ein:
1
using System.Data.SQLite;

Datenbank in C# zur Laufzeit (Runtime) erstellen

  • Eine neue “SQLiteConnection” erstellen
  • Parameter angeben:
    “Data Source” ist die einzige Pflichtangabe. Alle weiteren Parameter sind optional.
    Welche weiteren Parameter ihnen zur Verfügung stehen, finden Sie in der auf Ihrem System installierten .CHM Hilfedatei unter “C:\Programme\SQLite.NET\Doc”.

Beispiel:

1
2
3
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
connection.Close();

Nachdem Sie den Source des Beispiels ausgeführt haben, finden Sie eine (noch leere) Datenbank “test.dat” im Verzeichnis der ausgeführten .EXE Datei.
In unserem Beispiel liegt diese SQLite Datenbank also unter “C:\tmp\HalloWelt\bin\Debug”.

Datenbank-Tabellen in C# zur Laufzeit erstellen

  • Eine neue “SQLiteConnection” erstellen (s.o.)
  • Den “Create Table” Befehl als SQLiteCommand einbinden
  • Diesen SQL Befehl an die Datenbank übergeben
  • Verbindung zur SQLite Datenbank wieder schließen

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand command = new SQLiteCommand(connection);
command.CommandText = String.Format("create table {0} (" +
    "  ID integer not null primary key autoincrement," +
    "  Name varchar(100) not null," +
    "  City varchar(100))",
    "Adressen");
command.ExecuteNonQuery();
 
connection.Close();

Im Beispiel wird eine einzelne Tabelle mit dem Namen “Adressen” und den Feldern “ID, Name, City” erstellt. Das Feld “ID” ist dabei der PK (Primary Key) und wird automatisch bei jedem Datensatz hochgezählt (Increment +1).

Daten in eine Tabelle in C# zur Laufzeit einfügen

Dieses Beispiel steht stellvertretend für jeden weiteren verfügbaren SQL Befehl. Eine Übersicht der anwendbaren SQL Befehle finden Sie in der SQLite Hilfe oder auf der SQLite Webseite:
http://www.sqlite.org/

Wie Sie Daten aus Tabellen abrufen können (SELECT Statements) finden Sie im nächsten Beispiel.

  • Eine neue “SQLiteConnection” erstellen (s.o.)
  • Den Befehl als SQLiteCommand einbinden
  • Diesen SQL Befehl an die Datenbank übergeben
  • Verbindung zur SQLite Datenbank wieder schließen

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand command = new SQLiteCommand(connection);
command.CommandText = String.Format("insert into Adressen (Name,City) values ('{0}','{1}')",
    "Max Muster",
    "Hamburg");
command.ExecuteNonQuery();
 
command.CommandText = String.Format("insert into Adressen (Name,City) values ('{0}','{1}')",
    "Bertha Besser",
    "Berlin");
command.ExecuteNonQuery();
 
connection.Close();

Im Beispiel werden zwei Datensätze in die oben erstellte Tabelle “Adressen” eingefügt:

  1. Max Muster, Hamburg
  2. Bertha Besser, Berlin

Daten aus einer Tabelle in C# zur Laufzeit abfragen

Dieses Beispiel steht stellvertretend für alle weiteren SQL Befehle, mit denen Sie Daten aus Ihrer Datenbank auslesen.

  • Eine neue “SQLiteConnection” erstellen (s.o.)
  • Den Befehl als SQLiteCommand einbinden
  • Diesen SQL Befehl an die Datenbank übergeben
  • Die erhaltenen Daten ggf. weiterverarbeiten
  • Verbindung zur SQLite Datenbank wieder schließen

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SQLiteConnection connection = new SQLiteConnection("Data Source=test.dat");
connection.Open();
 
SQLiteCommand cmd = new SQLiteCommand("select * from Adressen", connection);
SQLiteDataReader reader = cmd.ExecuteReader();
 
if (reader.HasRows)
while (reader.Read())
{
  string name = reader.GetString(reader.GetOrdinal("Name"));
  string city = reader.GetString(reader.GetOrdinal("City"));
  MessageBox.Show(string.Format("{0}, {1}", name, city));
}
 
connection.Close();

Im Beispiel werden alle Datensätze aus der oben erstellten Tabelle “Adressen” eingelesen.
Jeder Datensatz wird dem Benutzer dann als MessageBox angezeigt.

SQLite Datenbank löschen

Ihre Datenbank können Sie (auch aus C# heraus) sehr einfach löschen, indem Sie die Datei “test.dat” (in unserem Beispiel) von der Festplatte löschen.

Voraussetzung ist, dass Sie keine offenen Verbindungen zur Datenbank haben. Ansonsten erhalten Sie einen Zugriffsfehler (“Access denied”).

Achtung:
Wenn Sie die Datendatei Ihrer SQLite Datenbank löschen, verlieren Sie sofort alle gespeicherten Daten !

Die 5 Kommentare anzeigen

  1. Hi
    Danke für dein Tutorial!

    Ich versuche seit langer Zeit eine geeigneter Datenbank für meine Projekte zu finden, die online (Mysql) oder im eigenen System laufen (als *.mdb).
    Die MDB lassen sich schnell (10 Sekunden) mit Informationen ausfüllen, die ich aus einer txt-Dateie auslese.
    Wenn ich dasselbe mit Sqlite db mache, dann dauert es ziemlich lang (mindestens 5 min.)

    Weiss jemand, was ich falsch mache, und ob es an mir liegt oder ……..

    cya

  2. Danke für den tollen Einstieg. Der Beitrag hat mir gerade bei der Entscheidung geholfen ob ich bei einer kleinen Applikation SQL Server CE oder SQLite nehmen soll.

    Und eine Anmerkung obendrauf. Wenn man mit Mono arbeitet und die Datenbank auf Windows und Linux/Mac haben möchte, kann man den Namespace von Mono.Data.Sqlite nehmen, dieser ist die Mono Implementierung der System.Data.SQLite, daher bleibt der Code der selbe. Auf Windows benötigt man dann noch die sqlite3.ddl welche man ins bin Verzeichnis kopieren muss, auf Linux/Mac wird die sqlite3.ddl nicht benötigt.

    Gruss Andreas

  3. Danke für die Anleitung und das Demo-Projekt!! Hat auch mir bei der Entscheidung geholfen, eine passende DB zu finden.
    Ich habe allerdings noch eine Frage zu 32/64 bit: Ist es möglich, beide DLLs (für 32 und 64 bit) hinzuzufügen, und das Programm zur Laufzeit entscheiden zu lassen, welche Lib gewählt wird?

    Gruß
    Andreas (2)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>