Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft.Data.Sqlite создается на основе SQLitePCLRaw. Чтобы использовать настраиваемые версии нативной библиотеки SQLite, используйте пакет или настройте поставщика SQLitePCLRaw.
Наборы
SQLitePCLRaw предоставляет удобные комплекты пакетов, которые упрощают применение подходящих зависимостей на различных платформах. Основной пакет Microsoft.Data.Sqlite по умолчанию добавляет SQLitePCLRaw.bundle_e_sqlite3. Чтобы использовать другой пакет, установите пакет Microsoft.Data.Sqlite.Core вместе с нужным вам пакетом. Пакеты автоматически инициализируются с помощью Microsoft.Data.Sqlite.
| Пакет | Описание |
|---|---|
| SQLitePCLRaw.bundle_e_sqlite3 | Предоставляет согласованные версии SQLite для всех платформ. Включает расширения FTS4, FTS5, JSON1 и R*Tree. Это значение по умолчанию. |
| SQLitePCLRaw.bundle_e_sqlcipher | Предоставляет неофициальную сборку SQLCipher с открытым кодом. |
| SQLitePCLRaw.bundle_green | Аналогично bundle_e_sqlite3, за исключением платформы iOS, где используется системная библиотека SQLite. |
| SQLitePCLRaw.bundle_sqlite3 | Использует системную библиотеку SQLite. |
| SQLitePCLRaw.bundle_winsqlite3 | Использует winsqlite3.dll, то есть системную библиотеку SQLite на платформе Windows 10. |
| SQLitePCLRaw.bundle_zetetic | Использует официальные сборки SQLCipher, предоставляемые Zetetic (не входят в пакет). |
Например, следующие команды позволяют применить неофициальную сборку SQLCipher с открытым кодом:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Поставщики SQLitePCLRaw: доступные варианты
Если нет желания использовать пакет, вы можете использовать доступные поставщики SQLite с основной сборкой.
| Поставщик | Описание |
|---|---|
| SQLitePCLRaw.provider.dynamic | Поставщик dynamic загружает собственную библиотеку вместо использования атрибутов System.Runtime.InteropServices.DllImportAttribute. Дополнительные сведения об использовании этого поставщика см. в используйте динамического поставщика. |
| SQLitePCLRaw.provider.e_sqlite3 |
e_sqlite3 является поставщиком по умолчанию. |
| SQLitePCLRaw.provider.e_sqlcipher | Поставщик e_sqlcipher — это неофициальный и неподдерживаемый провайдер SQLCipher. |
| SQLitePCLRaw.provider.sqlite3 | Поставщик sqlite3 — это системный компонент SQLite для iOS, macOS и Linux. |
| SQLitePCLRaw.provider.sqlcipher | Поставщик sqlcipher предназначен для официальных сборок SQLCipher от Zetetic. |
| SQLitePCLRaw.provider.winsqlite3 | Поставщик winsqlite3 предназначен для сред Windows 10. |
Для использования поставщика sqlite3 примените следующие команды:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
После установки пакетов настройте экземпляр sqlite3 в качестве поставщика.
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}");
}
}
}
Использование динамического поставщика
Вы можете использовать собственную сборку SQLite, применяя пакет SQLitePCLRaw.provider.dynamic_cdecl. В этом случае вы обязаны самостоятельно развертывать нативную библиотеку совместно с приложением. Обратите внимание, что процедура развертывания нативных библиотек вместе с приложением будет существенно различаться на разных платформах .NET и в разных средах выполнения.
Прежде всего нужно реализовать IGetFunctionPointer. Ниже приведены сведения о такой реализации на .NET Core.
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;
}
Далее настройте поставщик SQLitePCLRaw. Это нужно сделать до того, как в приложении будет использоваться Microsoft.Data.Sqlite. Также избегайте использования пакета SQLitePCLRaw, который может переопределить вашего провайдера.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());