Freigeben über


Benutzerdefinierte SQLite-Versionen

Microsoft.Data.Sqlite basiert auf SQLitePCLRaw. Sie können benutzerdefinierte Versionen der nativen SQLite-Bibliothek verwenden, indem Sie ein Bundle verwenden oder einen SQLitePCLRaw-Anbieter konfigurieren.

Bundles

SQLitePCLRaw bietet benutzerfreundliche Bundlepakete, mit denen problemlos die richtigen Abhängigkeiten auf verschiedenen Plattformen genutzt werden können. Im Microsoft.Data.Sqlite-Hauptpaket ist SQLitePCLRaw.bundle_e_sqlite3 standardmäßig enthalten. Installieren Sie das Microsoft.Data.Sqlite.Core-Paket und das gewünschte Bundlepaket, wenn Sie ein anderes Bundle verwenden möchten. Bundles werden automatisch von Microsoft.Data.Sqlite initialisiert.

Paket Beschreibung
SQLitePCLRaw.bundle_e_sqlite3 Dieses Bundle stellt eine konsistente Version von SQLite auf allen Plattformen bereit. Es umfasst die FTS4-, FTS5-, JSON1 und R*Tree-Erweiterungen. Dies ist die Standardeinstellung.
SQLitePCLRaw.bundle_e_sqlcipher Hiermit wird ein inoffizieller Open-Source-Build von SQLCipher bereitgestellt.
SQLitePCLRaw.bundle_green Dies ist mit bundle_e_sqlite3 identisch, mit der Ausnahme, dass unter iOS die SQLite-Systembibliothek verwendet wird.
SQLitePCLRaw.bundle_sqlite3 Hier wird die SQLite -Systembibliothek verwendet.
SQLitePCLRaw.bundle_winsqlite3 Hier wird mit winsqlite3.dll die SQLite-Systembibliothek unter Windows 10 verwendet.
SQLitePCLRaw.bundle_zetetic Hier werden die offiziellen SQLCipher-Builds von Zetetic (nicht enthalten) verwendet.

Nutzen Sie für die Verwendung des inoffiziellen Open-Source-Builds von SQLCipher die folgenden Befehle.

dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher

Verfügbare SQLitePCLRaw-Anbieter

Wenn Sie nicht auf ein Bundle angewiesen sind, können Sie die verfügbaren Anbieter von SQLite mit der Kernassembly verwenden.

Anbieter Beschreibung
SQLitePCLRaw.provider.dynamic Der dynamic-Anbieter lädt die native Bibliothek, anstatt System.Runtime.InteropServices.DllImportAttribute-Attribute zu verwenden. Weitere Informationen zur Verwendung dieses Anbieters finden Sie unter Verwenden des dynamischen Anbieters.
SQLitePCLRaw.provider.e_sqlite3 e_sqlite3 ist der Standardanbieter.
SQLitePCLRaw.provider.e_sqlcipher Der e_sqlcipher-Anbieter bietet das inoffizielle und nicht unterstützte SQLCipher.
SQLitePCLRaw.provider.sqlite3 Der sqlite3-Anbieter bietet ein vom System bereitgestelltes SQLite für iOS, macOS und Linux.
SQLitePCLRaw.provider.sqlcipher Der sqlcipher-Anbieter ist für offizielle SQLCipher-Builds von Zetetic bestimmt.
SQLitePCLRaw.provider.winsqlite3 Der winsqlite3-Anbieter ist für Windows 10-Umgebungen bestimmt.

Verwenden Sie die folgenden Befehle für den sqlite3-Anbieter:

dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3

Nachdem die Pakete installiert sind, legen Sie den Anbieter auf die sqlite3-Instanz fest.

using Microsoft.Data.Sqlite;
using System;

namespace SqliteProviderSample
{
    class Program
    {
        static void Main()
        {
            SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3());

            using var connection = new SqliteConnection();
            Console.WriteLine($"System SQLite version: {connection.ServerVersion}");
        }
    }
}

Verwenden des dynamischen Anbieters

Sie können Ihren eigenen Build von SQLite verwenden, indem Sie das SQLitePCLRaw.provider.dynamic_cdecl-Paket nutzen. In diesem Fall sind Sie für die Bereitstellung der nativen Bibliothek mit Ihrer App verantwortlich. Beachten Sie, dass die Details für die Bereitstellung nativer Bibliotheken mit Ihrer App in Abhängigkeit von der verwendeten .NET-Plattform und Runtime erheblich variieren können.

Zuerst muss IGetFunctionPointer implementiert werden. Die Implementierung in .NET Core erfolgt so:

class NativeLibraryAdapter : IGetFunctionPointer
{
    readonly IntPtr _library;

    public NativeLibraryAdapter(string name)
        => _library = NativeLibrary.Load(name);

    public IntPtr GetFunctionPointer(string name)
        => NativeLibrary.TryGetExport(_library, name, out var address)
            ? address
            : IntPtr.Zero;
}

Konfigurieren Sie als Nächstes den SQLitePCLRaw-Anbieter. Stellen Sie sicher, dass Sie diesen Schritt abgeschlossen haben, bevor Microsoft.Data.Sqlite in Ihrer App verwendet wird. Vermeiden Sie außerdem die Verwendung eines SQLitePCLRaw-Bundlepakets, das Ihren Anbieter möglicherweise überschreibt.

SQLite3Provider_dynamic_cdecl
    .Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());