Niestandardowe wersje programu SQLite
Microsoft.Data.Sqlitejest zbudowany na podstawie .SQLitePCLRaw Niestandardowe wersje natywnej biblioteki SQLite można używać przy użyciu pakietu lub przez skonfigurowanie dostawcy SQLitePCLRaw .
Wiązki
SQLitePCLRaw zapewnia pakiety pakietów oparte na wygodzie, które ułatwiają wprowadzanie 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 program Microsoft.Data.Sqlite.
| 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ą, open source kompilację programu SQLCipher. |
| SQLitePCLRaw.bundle_green | Taki sam jak 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.dllbiblioteki SQLite systemu w Windows 10. |
| SQLitePCLRaw.bundle_zetetic | Używa oficjalnych SQLCipher kompilacji z Zetetic (nieuwzględnione). |
Aby na przykład użyć nieoficjalnej kompilacji SQLCipher open source, użyj następujących poleceń.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Dostawcy dostępności SQLitePCLRaw
Jeśli nie polegasz na pakiecie, możesz użyć dostępnych dostawców SQLite z podstawowym zestawem.
| Dostawca | Opis |
|---|---|
| SQLitePCLRaw.provider.dynamic | dynamic Dostawca ł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 Zeteticprogramu . |
| SQLitePCLRaw.provider.winsqlite3 | Dostawca winsqlite3 jest przeznaczony dla środowisk 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 odpowiadasz za wdrożenie biblioteki natywnej za pomocą aplikacji. Uwaga: szczegóły wdrażania bibliotek natywnych w aplikacji różnią się znacznie w zależności od używanej platformy i środowiska uruchomieniowego platformy .NET.
Najpierw należy zaimplementować IGetFunctionPointerelement . 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());