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.
Em 2005, Robert Simpson criou System.Data.SQLite, um provedor SQLite para ADO.NET 2.0. Em 2010, a equipe do SQLite assumiu a manutenção e o desenvolvimento do projeto. Também vale a pena observar que a equipe Mono bifurcou o código em 2007 como Mono.Data.Sqlite. System.Data.SQLite tem um longo histórico e evoluiu para um provedor de ADO.NET estável e completo com ferramentas do Visual Studio. As novas versões continuam a enviar assemblies compatíveis com todas as versões do .NET Framework para a versão 2.0 e até mesmo o .NET Compact Framework 3.5.
A primeira versão do .NET Core (lançada em 2016) foi uma implementação única, leve, moderna e multiplataforma do .NET. APIs obsoletas e APIs que possuem alternativas mais modernas foram removidas intencionalmente. ADO.NET não incluiu nenhuma das APIs do DataSet (incluindo DataTable e DataAdapter).
A equipe do Entity Framework estava um pouco familiarizada com a base de código System.Data.SQLite. Brice Lambson, ex-membro da equipe do EF, já havia ajudado a equipe do SQLite a adicionar suporte para as versões 5 e 6 do Entity Framework. Brice também estava experimentando sua própria implementação de um provedor de ADO.NET SQLite na mesma época em que o .NET Core estava sendo planejado. Após uma longa discussão, a equipe do Entity Framework decidiu criar o Microsoft.Data.Sqlite com base no protótipo do Brice. Isso permitiria que eles criassem uma implementação leve e moderna que se alinhasse com as metas do .NET Core.
Como exemplo do que queremos dizer com mais moderno, aqui está o código para criar uma função definida pelo usuário em System.Data.SQLite e Microsoft.Data.Sqlite.
// System.Data.SQLite
connection.BindFunction(
new SQLiteFunctionAttribute("ceiling", 1, FunctionType.Scalar),
(Func<object[], object>)((object[] args) => Math.Ceiling((double)((object[])args[1])[0])),
null);
// Microsoft.Data.Sqlite
connection.CreateFunction(
"ceiling",
(double arg) => Math.Ceiling(arg));
Em 2017, o .NET Core 2.0 experimentou uma mudança de estratégia. Foi decidido que a compatibilidade com o .NET Framework era vital para o sucesso do .NET Core. Muitas das APIs removidas, incluindo as APIs do DataSet, foram adicionadas novamente. Assim como aconteceu com muitos outros, isso desbloqueou o System.Data.SQLite, permitindo que ele também seja portado para o .NET Core. A meta original do Microsoft.Data.Sqlite de ser leve e moderna, no entanto, ainda permanece. Consulte limitações do ADO.NET para obter detalhes sobre APIs ADO.NET não implementadas pelo Microsoft.Data.Sqlite.
Quando novos recursos são adicionados ao Microsoft.Data.Sqlite, o design de System.Data.SQLite é levado em conta. Tentamos, quando possível, minimizar as alterações entre os dois para facilitar a transição entre eles.
Tipos de dados
A maior diferença entre Microsoft.Data.Sqlite e System.Data.SQLite é como os tipos de dados são tratados. Conforme descrito em tipos de dados, Microsoft.Data.Sqlite não tenta ocultar a peculiaridade subjacente do SQLite, que permite que qualquer cadeia de caracteres arbitrária seja especificada como o tipo de coluna e tenha apenas quatro tipos primitivos: INTEGER, REAL, TEXT e BLOB.
System.Data.SQLite aplica semântica adicional a tipos de coluna mapeando-os diretamente para tipos .NET. Isso dá ao provedor uma sensação mais fortemente tipada, mas não é completamente adequado. Por exemplo, eles tiveram que introduzir uma nova instrução SQL (TYPES) para especificar os tipos de coluna de expressões em instruções SELECT.
Cadeias de conexão
Microsoft.Data.Sqlite tem muito menos palavras-chave de cadeia de conexão. A tabela a seguir mostra alternativas que podem ser usadas.
| Palavra-chave | Alternativa |
|---|---|
| Tamanho do cache | Enviar PRAGMA cache_size = <pages> |
| FailIfMissing | Usar Mode=ReadWrite |
| FullUri | Usar a palavra-chave da Fonte de Dados |
| Modo diário | Enviar PRAGMA journal_mode = <mode> |
| Formato herdado | Enviar PRAGMA legacy_file_format = 1 |
| Contagem máxima de páginas | Enviar PRAGMA max_page_count = <pages> |
| Tamanho da Página | Enviar PRAGMA page_size = <bytes> |
| Somente leitura | Usar Mode=ReadOnly |
| Síncrono | Enviar PRAGMA synchronous = <mode> |
| URI | Usar a palavra-chave da Fonte de Dados |
| UseUTF16Encoding | Enviar PRAGMA encoding = 'UTF-16' |
Autorização
O Microsoft.Data.Sqlite não tem nenhuma API expondo o callback de autorização do SQLite. Use o problema nº 13835 para fornecer comentários sobre esse recurso.
Notificações de alteração de dados
O Microsoft.Data.Sqlite não tem nenhuma API expondo as notificações de alteração de dados do SQLite. Use a questão #13827 para fornecer comentários sobre esse recurso.
Módulos de tabela virtual
Microsoft.Data.Sqlite não tem nenhuma API para criar módulos de tabela virtual. Use o problema nº 13823 para fornecer comentários sobre esse recurso.
Consulte também
- tipos de dados
- Cadeias de conexão
- Criptografia
- Limitações do ADO.NET
- Limitações do Dapper