カスタム SQLite のバージョン
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 | Windows 10 のシステム SQLite ライブラリである winsqlite3.dll が使用されます。 |
SQLitePCLRaw.bundle_zetetic | Zetetic の公式の SQLCipher ビルドが使用されます (含まれていません)。 |
たとえば、オープン ソースの非公式の 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 プロバイダーは、iOS、macOS、Linux 用のシステム提供の SQLite です。 |
SQLitePCLRaw.provider.sqlcipher | sqlcipher プロバイダーは、Zetetic からの公式 SQLCipher ビルド用です。 |
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}");
}
}
}
動的プロバイダーを使用する
SQLitePCLRaw.provider.dynamic_cdecl
パッケージを利用すると、独自の SQLite ビルドを使用できます。 この場合、アプリとともにネイティブ ライブラリをデプロイする必要があります。 ただし、アプリとともにネイティブ ライブラリをデプロイする場合の詳細は、使用している .NET プラットフォームとランタイムによって大きく異なります。
まず、IGetFunctionPointer
を実装する必要があります。 .NET Core での実装は次のようになります。
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;
}
次に、SQLitePCLRaw
プロバイダーを構成します。 これは、アプリで Microsoft.Data.Sqlite
が使用される前に行ってください。 また、プロバイダーがオーバーライドされる可能性のある SQLitePCLRaw
バンドル パッケージを使用しないようにしてください。
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());
.NET