Partager via


Versions SQLite personnalisées

Microsoft.Data.Sqlite est basé sur SQLitePCLRaw. Vous pouvez utiliser des versions personnalisées de la bibliothèque SQLite native à l’aide d’un pack ou en configurant un fournisseur de SQLitePCLRaw .

Packs

SQLitePCLRaw fournit des packs groupés basés à des fins de commodité, facilitant l’intégration des dépendances appropriées sur différentes plateformes. Le package Microsoft.Data.Sqlite main apporte SQLitePCLRaw.bundle_e_sqlite3 par défaut. Pour utiliser un autre pack, installez le package Microsoft.Data.Sqlite.Core à la place avec le pack groupé que vous souhaitez utiliser. Les packs groupés sont initialisés automatiquement par Microsoft.Data.Sqlite.

Bundle Description
SQLitePCLRaw.bundle_e_sqlite3 Fournit une version cohérente de SQLite sur toutes les plateformes. Inclut les extensions FTS4, FTS5, JSON1 et R*Tree. Il s’agit de la valeur par défaut.
SQLitePCLRaw.bundle_e_sqlcipher Fournit une build open source non officielle de SQLCipher.
SQLitePCLRaw.bundle_green Identique à bundle_e_sqlite3, sauf sur iOS où il utilise la bibliothèque SQLite système.
SQLitePCLRaw.bundle_sqlite3 Utilise la bibliothèque SQLite système.
SQLitePCLRaw.bundle_winsqlite3 Utilise winsqlite3.dll, la bibliothèque SQLite système sur Windows 10.
SQLitePCLRaw.bundle_zetetic Utilise les builds officielles SQLCipher de Zetetic (non incluses).

Par exemple, pour utiliser la build open source non officielle de SQLCipher, utilisez les commandes suivantes.

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

Fournisseurs disponibles SQLitePCLRaw

Lorsque vous ne vous fiez pas à un pack, vous pouvez utiliser les fournisseurs disponibles de SQLite avec l’assembly principal.

Fournisseur Description
SQLitePCLRaw.provider.dynamic Le fournisseur dynamic charge la bibliothèque native au lieu d’utiliser des attributs System.Runtime.InteropServices.DllImportAttribute. Pour plus d’informations sur l’utilisation de ce fournisseur, consultez Utiliser le fournisseur dynamique.
SQLitePCLRaw.provider.e_sqlite3 e_sqlite3 est le fournisseur par défaut.
SQLitePCLRaw.provider.e_sqlcipher Le fournisseur e_sqlcipher est le SQLCipher non officiel et non soutenu.
SQLitePCLRaw.provider.sqlite3 Le fournisseur sqlite3 est un SQLite fourni par le système pour iOS, macOS et Linux.
SQLitePCLRaw.provider.sqlcipher Le fournisseur sqlcipher est destiné aux builds SQLCipher officielles de Zetetic.
SQLitePCLRaw.provider.winsqlite3 Le fournisseur winsqlite3 est destiné aux environnements Windows 10.

Pour utiliser le fournisseur sqlite3, utilisez les commandes suivantes :

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

Une fois les packages installés, vous définissez le fournisseur sur l’instance de 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}");
        }
    }
}

Utiliser le fournisseur dynamique

Vous pouvez utiliser votre propre build de SQLite en tirant parti du package SQLitePCLRaw.provider.dynamic_cdecl. Dans ce cas, vous êtes responsable du déploiement de la bibliothèque native avec votre application. Notez que les détails du déploiement des bibliothèques natives avec votre application varient considérablement en fonction de la plateforme .NET et du runtime que vous utilisez.

Tout d’abord, vous devez implémenter IGetFunctionPointer. L’implémentation sur .NET Core est la suivante :

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

Ensuite, configurez le fournisseur SQLitePCLRaw. Assurez-vous que cela est effectué avant d’utiliser Microsoft.Data.Sqlite dans votre application. En outre, évitez d’utiliser un pack groupé SQLitePCLRaw qui peut remplacer votre fournisseur.

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