Sdílet prostřednictvím


Vlastní verze SQLite

Microsoft.Data.Sqlite je postaven na SQLitePCLRaw. Vlastní verze nativní knihovny SQLite můžete použít pomocí balíčku nebo konfigurací SQLitePCLRaw poskytovatele.

Sady

SQLitePCLRaw poskytuje pohodlné balíčky, které usnadňují zahrnutí správných závislostí napříč různými platformami. Hlavní balíček Microsoft.Data.Sqlite přináší SQLitePCLRaw.bundle_e_sqlite3 ve výchozím nastavení. Pokud chcete použít jinou sadu, nainstalujte Microsoft.Data.Sqlite.Core balíček společně s balíčkem, který chcete použít. Svazky jsou automaticky inicializovány pomocí Microsoft.Data.Sqlite.

Sada Popis
SQLitePCLRaw.bundle_e_sqlite3 Poskytuje konzistentní verzi SQLite na všech platformách. Zahrnuje rozšíření FTS4, FTS5, JSON1 a R*Tree. Tato možnost je výchozí.
SQLitePCLRaw.bundle_e_sqlcipher Poskytuje neoficiální open-source verzi SQLCipher.
SQLitePCLRaw.bundle_green Stejné jako bundle_e_sqlite3v iOSu, kde používá systémovou knihovnu SQLite.
SQLitePCLRaw.bundle_sqlite3 Používá systémovou knihovnu SQLite.
SQLitePCLRaw.bundle_winsqlite3 Používá winsqlite3.dllsystémovou knihovnu SQLite ve Windows 10.
SQLitePCLRaw.bundle_zetetic Používá oficiální SQLCipher buildy ze Zetetic (nezahrnuté).

Pokud například chcete použít neoficiální opensourcové SQLCipher sestavení, použijte následující příkazy.

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

Poskytovatelé dostupní pro SQLitePCLRaw

Pokud se nespoléháte na balíček, můžete použít dostupné zprostředkovatele SQLite společně se základní knihovnou.

Poskytovatel Popis
SQLitePCLRaw.provider.dynamic Poskytovatel dynamic načte nativní knihovnu místo použití atributů System.Runtime.InteropServices.DllImportAttribute. Další informace o použití tohoto zprostředkovatele najdete v tématu použití dynamického zprostředkovatele.
SQLitePCLRaw.provider.e_sqlite3 e_sqlite3 je výchozí zprostředkovatel.
SQLitePCLRaw.provider.e_sqlcipher Poskytovatel e_sqlcipher je neoficiální a není podporován SQLCipher.
SQLitePCLRaw.provider.sqlite3 Poskytovatel sqlite3 je systémový SQLite pro iOS, macOS a Linux.
SQLitePCLRaw.provider.sqlcipher Poskytovatel sqlcipher je určen pro oficiální SQLCipher buildy z Zetetic.
SQLitePCLRaw.provider.winsqlite3 Poskytovatel winsqlite3 je pro prostředí Windows 10.

K použití sqlite3 zprostředkovatele použijte následující příkazy:

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

S nainstalovanými balíčky pak nastavíte zprostředkovatele na sqlite3 instanci.

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

Použijte dynamického zprostředkovatele

Pomocí balíčku SQLitePCLRaw.provider.dynamic_cdecl můžete použít vlastní verzi SQLite. V takovém případě zodpovídáte za nasazení nativní knihovny s vaší aplikací. Všimněte si, že podrobnosti o nasazení nativních knihoven s vaší aplikací se výrazně liší v závislosti na tom, jakou platformu .NET a modul runtime používáte.

Nejprve budete muset implementovat IGetFunctionPointer. Implementace v .NET Core je následující:

class NativeLibraryAdapter : IGetFunctionPointer
{
    readonly IntPtr _library;

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

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

Dále nakonfigurujte SQLitePCLRaw zprostředkovatele. Ujistěte se, že se to udělá, než se Microsoft.Data.Sqlite použije ve vaší aplikaci. Vyhněte se také použití SQLitePCLRaw balíčku, který by mohl přepsat vašeho poskytovatele.

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