Udostępnij za pośrednictwem


Niestandardowe wersje programu SQLite

Microsoft.Data.Sqlite jest oparty na systemie SQLitePCLRaw. Możesz użyć niestandardowych wersji natywnej biblioteki SQLite przy użyciu pakietu lub przez skonfigurowanie SQLitePCLRaw dostawcy.

Pakiety

SQLitePCLRaw Zapewnia pakiety pakietów oparte na wygodzie, które ułatwiają korzystanie z odpowiednich zależności na różnych platformach. Microsoft.Data.Sqlite Główny pakiet jest domyślnie wprowadzanySQLitePCLRaw.bundle_e_sqlite3. Aby użyć innego pakietu, zainstaluj Microsoft.Data.Sqlite.Core pakiet wraz z pakietem, którego chcesz użyć. Pakiety są automatycznie inicjowane przez Microsoft.Data.Sqliteprogram .

Pakiet opis
SQLitePCLRaw.bundle_e_sqlite3 Zapewnia spójną wersję sqlite na wszystkich platformach. Obejmuje rozszerzenia FTS4, FTS5, JSON1 i R*Tree. Jest to opcja domyślna.
SQLitePCLRaw.bundle_e_sqlcipher Udostępnia nieoficjalną kompilację typu open source programu SQLCipher.
SQLitePCLRaw.bundle_green To samo co bundle_e_sqlite3, z wyjątkiem systemu iOS, gdzie używa systemowej biblioteki SQLite.
SQLitePCLRaw.bundle_sqlite3 Używa systemowej biblioteki SQLite.
SQLitePCLRaw.bundle_winsqlite3 Używa winsqlite3.dllsystemu , systemowa biblioteka SQLite w systemie Windows 10.
SQLitePCLRaw.bundle_zetetic Używa oficjalnych SQLCipher kompilacji z Zetetic (nieuwzględniane).

Aby na przykład użyć nieoficjalnej kompilacji SQLCipher typu open source, użyj następujących poleceń.

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

SqLitePCLRaw dostępnych dostawców

Jeśli nie korzystasz z pakietu, możesz użyć dostępnych dostawców SQLite z podstawowym zestawem.

Dostawca opis
SQLitePCLRaw.provider.dynamic Dostawca dynamic ładuje bibliotekę natywną zamiast używać System.Runtime.InteropServices.DllImportAttribute atrybutów. Aby uzyskać więcej informacji na temat korzystania z tego dostawcy, zobacz używanie dostawcy dynamicznego.
SQLitePCLRaw.provider.e_sqlite3 Jest e_sqlite3 to domyślny dostawca.
SQLitePCLRaw.provider.e_sqlcipher Dostawca e_sqlcipher jest nieoficjalny i nieobsługiwany SQLCipher.
SQLitePCLRaw.provider.sqlite3 Dostawca sqlite3 jest dostarczany SQLite przez system dla systemów iOS, macOS i Linux.
SQLitePCLRaw.provider.sqlcipher Dostawca sqlcipher jest przeznaczony dla oficjalnych SQLCipher kompilacji z programu Zetetic.
SQLitePCLRaw.provider.winsqlite3 Dostawca winsqlite3 jest przeznaczony dla środowisk systemu Windows 10.

Aby użyć dostawcy sqlite3 , użyj następujących poleceń:

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

Po zainstalowaniu pakietów należy ustawić dostawcę na sqlite3 wystąpienie.

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}");
        }
    }
}

Używanie dostawcy dynamicznego

Możesz użyć własnej kompilacji SQLite, korzystając z SQLitePCLRaw.provider.dynamic_cdecl pakietu. W takim przypadku ponosisz odpowiedzialność za wdrożenie biblioteki natywnej za pomocą aplikacji. Należy pamiętać, że szczegóły wdrażania bibliotek natywnych w aplikacji różnią się znacznie w zależności od używanej platformy .NET i środowiska uruchomieniowego.

Najpierw należy zaimplementować element IGetFunctionPointer. Implementacja platformy .NET Core jest następująca:

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;
}

Następnie skonfiguruj dostawcę SQLitePCLRaw . Upewnij się, że zostało to zrobione przed Microsoft.Data.Sqlite rozpoczęciem użycia w aplikacji. Należy również unikać używania SQLitePCLRaw pakietu pakietu, który może zastąpić dostawcę.

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