C#, .NET 6 und SQLite

In diesem Blogbeitrag geht es um das Erstellen einer SQLite3-Datenbank mit C# und .NET 6. Dies kann mit Microsofts Bibliothek

Microsoft.Data.Sqlite

umgesetzt werden, die über NuGet verfügbar ist.

Windows

Die Installation von Microsoft.Data.Sqlite ist über die PowerShell bzw. die .NET Core-CLI möglich:

dotnet add package Microsoft.Data.Sqlite

Für die erfolgreiche Ausführung dieser Anweisung ist es erforderlich, dass man sich im entsprechenden Projektmappenverzeichnis befindet.

Selbstverständlich gibt es zahlreiche Wege der Erstellung einer SQLite3-Datenbank. Nachfolgend wird eine einfache Umsetzung gezeigt; es handelt sich sozusagen um eine „Basisversion“, die als Ausgangspunkt für Eure Projekte dienen mag.

Das Grundgerüst dieses Projekts, das ich „SQLiteExample“ genannt habe, sieht folgendermaßen aus:

using Microsoft.Data.Sqlite;

namespace SQLiteExample
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

In diesem Beispiel soll eine SQLite3-Datenbank mit der Bezeichnung „test.sqlite“ im eigenen Dokumente-Verzeichnis erstellt werden. Auf meinem System würde der Pfad so aussehen:

@"C:\Users\bodo\Documents\test.sqlite"

Das ist allerdings spätestens dann problematisch, wenn der Code unter einem anderen Benutzer-Account (als „bodo“) ausgeführt wird. Deswegen wird der Pfad zum Dokumente-Verzeichnis zunächst mit Environment.GetFolderPath() ermittelt:

string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Um nun diesen Pfad (und eventuell weitere für die Verbindung zur Datenbank erforderlichen Informationen) verwenden zu können, wird auf die Klasse SqliteConnectionStringBuilder zurückgegriffen:

var connectionStringBuilder = new SqliteConnectionStringBuilder 
{
    Mode = SqliteOpenMode.ReadWriteCreate,
    DataSource = documentsPath + "\\" + "test.sqlite"
};
var connectionString = connectionStringBuilder.ToString();

Dabei werden zwei Verbindungsinformationen angegeben. Zum einen der Modus, und zwar

SqliteOpenMode.ReadWriteCreate

Er öffnet die Datenbank für den Lese- und Schreibzugriff. Sofern die Datenbank nicht vorhanden ist, wird sie erstellt. Weitere Informationen zu den Modi finden sich in der offiziellen Dokumentation.

Zum anderen wird der Pfad angegeben, wobei in diesem Beispiel zwei Backslashs verwendet werden. Alternativ könnte auch die Unicode-Zeichenfolge \u005c geschrieben werden.

Mit diesen Informationen kann schließlich die Variable connectionString definiert werden:

var connectionString = connectionStringBuilder.ToString();

Jetzt fehlen nur noch zwei weitere Zeilen:

SqliteConnection connection = new SqliteConnection(connectionString);

connection.Open();

Zunächst wir eine Instanz der Klasse SqliteConnection erzeugt, an die connectionString übergeben wird. Den Rest erledigt die Methode Open(). Wenn Ihr dieses Beispiel auf Eurem System nachvollzogen habt, sollte sich jetzt in Eurem Dokumente-Verzeichnis die Datenbank „test.sqlite“ befinden.

Abschließend noch der komplette Code:

using Microsoft.Data.Sqlite;

namespace SQLiteExample
{
    class Program
    {
        static void Main(string[] args)
        {
            string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

            var connectionStringBuilder = new SqliteConnectionStringBuilder 
            {
                Mode = SqliteOpenMode.ReadWriteCreate,
                DataSource = documentsPath + "\\" + "test.sqlite"
            };
            var connectionString = connectionStringBuilder.ToString();

            SqliteConnection connection = new SqliteConnection(connectionString);

            connection.Open();
        }
    }
}

macOS

Das gezeigte Beispiel funktioniert auch unter macOS. Denn mit .NET 6 ist eine plattformübergreifende Entwicklung von Programmen möglich. Es muss lediglich der Pfad zum Dokumente-Verzeichnis angepasst werden:

DataSource = documentsPath + "/Documents/" + "test.sqlite"

Denn zum einen werden auf Mac-Systemen die Elemente eines Pfads mit einem Slash abgegrenzt, zum anderen führt

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

nicht in das eigene Dokumente-Verzeichnis, sondern in das übergeordnete Benutzerverzeichnis (also ~).

Die Installation der Bibliothek Microsoft.Data.Sqlite kann unter macOS ebenfalls über die .NET-CLI vorgenommen werden:

dotnet add package Microsoft.Data.Sqlite

Eventuell ist anschließend ein Neustart von Visual Studio erforderlich.

Weiterführende Links