Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Microsoft.Data.Sqlite é criado com base no SQLitePCLRaw. Você pode usar versões personalizadas da biblioteca nativa do SQLite usando um pacote ou configurando um provedor SQLitePCLRaw.
Pacotes
SQLitePCLRaw fornece conjuntos de pacotes baseados em conveniência, que facilitam a entrada das dependências certas em diferentes plataformas. O pacote Microsoft.Data.Sqlite principal inclui SQLitePCLRaw.bundle_e_sqlite3 por padrão. Para usar um pacote diferente, instale o pacote Microsoft.Data.Sqlite.Core junto com o pacote que você quer usar. Os pacotes são inicializados automaticamente por Microsoft.Data.Sqlite.
| Grupo | Descrição |
|---|---|
| SQLitePCLRaw.bundle_e_sqlite3 | Fornece uma versão consistente do SQLite em todas as plataformas. Inclui as extensões FTS4, FTS5, JSON1 e R*Tree. Esse é o padrão. |
| SQLitePCLRaw.bundle_e_sqlcipher | Fornece um build não oficial de software livre de SQLCipher. |
| SQLitePCLRaw.bundle_green | O mesmo que bundle_e_sqlite3, exceto no iOS em que ele usa a biblioteca SQLite do sistema. |
| SQLitePCLRaw.bundle_sqlite3 | Usa a biblioteca SQLite do sistema. |
| SQLitePCLRaw.bundle_winsqlite3 | Usa winsqlite3.dll, a biblioteca SQLite do sistema no Windows 10. |
| SQLitePCLRaw.bundle_zetetic | Usa os builds SQLCipher oficiais do Zetetic (não incluídos). |
Por exemplo, para usar o build não oficial de software livre de SQLCipher, use os comandos a seguir.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Provedores disponíveis do SQLitePCLRaw
Ao não depender de um pacote, você pode usar os provedores disponíveis do SQLite com o assembly principal.
| Provedor | Descrição |
|---|---|
| SQLitePCLRaw.provider.dynamic | O provedor dynamic carrega a biblioteca nativa em vez de usar atributos System.Runtime.InteropServices.DllImportAttribute. Para mais informações sobre como usar esse provedor, confira Usar o provedor dinâmico. |
| SQLitePCLRaw.provider.e_sqlite3 | O e_sqlite3 é o provedor padrão. |
| SQLitePCLRaw.provider.e_sqlcipher | O provedor e_sqlcipher é o SQLCipher não oficial e sem suporte. |
| SQLitePCLRaw.provider.sqlite3 | O provedor sqlite3 é um SQLite fornecido pelo sistema para iOS, macOS e Linux. |
| SQLitePCLRaw.provider.sqlcipher | O provedor sqlcipher é para builds do SQLCipher oficiais de Zetetic. |
| SQLitePCLRaw.provider.winsqlite3 | O provedor winsqlite3 é para ambientes Windows 10. |
Para usar o provedor sqlite3, use os seguintes comandos:
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.core
dotnet add package SQLitePCLRaw.provider.sqlite3
Com os pacotes instalados, você define o provedor para a instância 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}");
}
}
}
Usar o provedor dinâmico
Você pode usar um build do SQLite próprio aproveitando o pacote SQLitePCLRaw.provider.dynamic_cdecl. Nesse caso, você é responsável por implantar a biblioteca nativa com seu aplicativo. Observe que os detalhes da implantação de bibliotecas nativas com seu aplicativo variam consideravelmente dependendo da plataforma .NET e do runtime que você está usando.
Primeiro, você precisará implementar IGetFunctionPointer. A implementação no .NET Core é a seguinte:
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;
}
Então configure o provedor SQLitePCLRaw. Verifique se isso é feito antes de Microsoft.Data.Sqlite ser usado em seu aplicativo. Além disso, evite usar um conjunto de pacotes SQLitePCLRaw que possa substituir seu provedor.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());