Bagikan melalui


Versi SQLite kustom

Microsoft.Data.Sqlite dibangun di atas SQLitePCLRaw. Anda dapat menggunakan versi kustom pustaka SQLite asli menggunakan bundel atau dengan mengonfigurasi penyedia SQLitePCLRaw.

Bundel

SQLitePCLRaw menyediakan paket bundel berbasis kenyamanan, yang memudahkan untuk membawa dependensi yang tepat di berbagai platform. Paket Microsoft.Data.Sqlite utama membawa SQLitePCLRaw.bundle_e_sqlite3 secara default. Untuk menggunakan bundel yang berbeda, instal paket Microsoft.Data.Sqlite.Core sebagai gantinya bersama dengan paket bundel yang ingin Anda gunakan. Bundel secara otomatis diinisialisasi oleh Microsoft.Data.Sqlite.

Bundel Deskripsi
SQLitePCLRaw.bundle_e_sqlite3 Menyediakan versi SQLite yang konsisten di semua platform. Menyertakan ekstensi FTS4, FTS5, JSON1, dan R*Tree. Ini adalah default.
SQLitePCLRaw.bundle_e_sqlcipher Menyediakan build sumber terbuka yang tidak resmi dari SQLCipher.
SQLitePCLRaw.bundle_green Sama seperti bundle_e_sqlite3, kecuali pada iOS di mana ia menggunakan pustaka SQLite sistem.
SQLitePCLRaw.bundle_sqlite3 Menggunakan sistem pustaka SQLite.
SQLitePCLRaw.bundle_winsqlite3 Menggunakan winsqlite3.dll, pustaka SQLite sistem pada Windows 10.
SQLitePCLRaw.bundle_zetetic Menggunakan build SQLCipher resmi dari Zetetic (tidak termasuk).

Misalnya, untuk menggunakan build SQLCipher sumber terbuka yang tidak resmi, gunakan perintah berikut.

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

Penyedia SQLitePCLRaw yang tersedia

Saat tidak mengandalkan bundel, Anda dapat menggunakan penyedia SQLite yang tersedia dengan perakitan inti.

Penyedia Deskripsi
SQLitePCLRaw.provider.dynamic Penyedia dynamic memuat pustaka asli alih-alih menggunakan atribut System.Runtime.InteropServices.DllImportAttribute. Untuk informasi selengkapnya tentang menggunakan penyedia ini, lihat menggunakan penyedia dinamis.
SQLitePCLRaw.provider.e_sqlite3 e_sqlite3 adalah penyedia default.
SQLitePCLRaw.provider.e_sqlcipher Penyedia e_sqlcipher adalah SQLCipher yang tidak resmi dan tidak didukung.
SQLitePCLRaw.provider.sqlite3 Penyedia sqlite3 adalah SQLite yang disediakan oleh sistem untuk iOS, macOS, dan Linux.
SQLitePCLRaw.provider.sqlcipher Penyedia sqlcipher adalah untuk build SQLCipher resmi dari Zetetic.
SQLitePCLRaw.provider.winsqlite3 Penyedia winsqlite3 adalah untuk lingkungan Windows 10.

Untuk menggunakan penyedia sqlite3, gunakan perintah berikut:

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

Dengan paket yang terinstal, Anda kemudian mengatur penyedia ke instans 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}");
        }
    }
}

Menggunakan penyedia dinamis

Anda dapat menggunakan build SQLite Anda sendiri dengan memanfaatkan paket SQLitePCLRaw.provider.dynamic_cdecl. Dalam hal ini, Anda bertanggung jawab untuk menyebarkan pustaka asli dengan aplikasi Anda. Perhatikan, detail penyebaran pustaka asli menggunakan aplikasi Anda sangat bervariasi tergantung pada platform .NET dan runtime yang Anda gunakan.

Pertama, Anda harus menerapkan IGetFunctionPointer. Implementasi pada Inti .NET adalah sebagai berikut:

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

Selanjutnya, konfigurasikan penyedia SQLitePCLRaw. Pastikan ini dilakukan sebelum Microsoft.Data.Sqlite digunakan di aplikasi Anda. Selain itu, hindari menggunakan paket bundel SQLitePCLRaw yang mungkin mengambil alih penyedia Anda.

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