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.Sqlite
program .
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.dll systemu , 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());