Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Microsoft.Data.Sqlite
é construído em cima de SQLitePCLRaw
. Você pode usar versões personalizadas da biblioteca SQLite nativa usando um pacote ou configurando um SQLitePCLRaw
provedor.
Pacotes
SQLitePCLRaw
fornece pacotes baseados em conveniência, que facilitam a introdução das dependências certas em diferentes plataformas. O pacote principal Microsoft.Data.Sqlite
inclui SQLitePCLRaw.bundle_e_sqlite3
por defeito. Para usar um pacote diferente, instale o Microsoft.Data.Sqlite.Core
pacote junto com o pacote que você deseja usar. Os pacotes são inicializados automaticamente pelo Microsoft.Data.Sqlite
.
Pacote | 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. Esta é a predefinição. |
SQLitePCLRaw.bundle_e_sqlcipher | Fornece uma compilação não oficial e de código aberto do SQLCipher . |
SQLitePCLRaw.bundle_green | O mesmo que bundle_e_sqlite3 , exceto no iOS, onde 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 as versões oficiais SQLCipher da Zetetic (não incluídas). |
Por exemplo, para usar a compilação não oficial de código aberto de SQLCipher
use os seguintes comandos.
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
Provedores disponíveis do SQLitePCLRaw
Quando não depender de um pacote, pode usar os fornecedores disponíveis do SQLite com a biblioteca central.
Fornecedor | Descrição |
---|---|
SQLitePCLRaw.provider.dynamic | O dynamic provedor carrega a biblioteca nativa em vez de usar System.Runtime.InteropServices.DllImportAttribute atributos. Para obter mais informações sobre como usar esse provedor, consulte Usar o provedor dinâmico. |
SQLitePCLRaw.provider.e_sqlite3 | O e_sqlite3 é o provedor padrão. |
SQLitePCLRaw.provider.e_sqlcipher | O e_sqlcipher provedor é o não oficial e sem suporte SQLCipher . |
SQLitePCLRaw.provider.sqlite3 | O sqlite3 provedor é fornecido pelo sistema SQLite para iOS, macOS e Linux. |
SQLitePCLRaw.provider.sqlcipher | O sqlcipher provedor é para compilações oficiais SQLCipher de Zetetic . |
SQLitePCLRaw.provider.winsqlite3 | O fornecedor winsqlite3 destina-se a ambientes Windows 10. |
Para usar o sqlite3
provedor, 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 sqlite3
instância.
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 sua própria compilação do SQLite aproveitando o SQLitePCLRaw.provider.dynamic_cdecl
pacote. 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 de qual plataforma .NET e tempo de execução 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 = NativeLibrary.Load(name);
public IntPtr GetFunctionPointer(string name)
=> NativeLibrary.TryGetExport(_library, name, out var address)
? address
: IntPtr.Zero;
}
Em seguida, configure o SQLitePCLRaw
provedor. Certifique-se de que isso seja feito antes Microsoft.Data.Sqlite
de ser usado em seu aplicativo. Além disso, evite usar um SQLitePCLRaw
pacote agrupado que possa substituir o seu fornecedor de serviços.
SQLite3Provider_dynamic_cdecl
.Setup("sqlite3", new NativeLibraryAdapter("sqlite3"));
SQLitePCL.raw.SetProvider(new SQLite3Provider_dynamic_cdecl());