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.
O SQLite tem apenas quatro tipos de dados primitivos: INTEGER, e REALTEXTBLOB. As APIs que retornam valores do banco de dados como um object só retornarão um desses quatro tipos. Tipos adicionais de .NET são suportados pelo Microsoft.Data.Sqlite, mas, em última análise, os valores são convertidos entre esses tipos e um dos quatro tipos primitivos.
| .NET | SQLite | Observações |
|---|---|---|
| Boolean | INTEGER |
0 ou 1 |
| Byte | INTEGER | |
| Byte[] | BLOB | |
| Char | TEXT | UTF-8 |
| DateOnly | TEXT | yyyy-MM-dd |
| DateTime | TEXT | yyyy-MM-dd HH:mm:ss.FFFFFFF |
| DateTimeOffset | TEXT | yyyy-MM-dd HH:mm:ss.FFFFFFFzzz |
| Decimal | TEXT | Formato 0.0###########################.
REAL seria com perdas. |
| Double | REAL | |
| Guid | TEXT | 00000000-0000-0000-0000-000000000000 |
| Int16 | INTEGER | |
| Int32 | INTEGER | |
| Int64 | INTEGER | |
| SByte | INTEGER | |
| Single | REAL | |
| String | TEXT | UTF-8 |
| TimeOnly | TEXT | HH:mm:ss.fffffff |
| TimeSpan | TEXT | d.hh:mm:ss.fffffff |
| UInt16 | INTEGER | |
| UInt32 | INTEGER | |
| UInt64 | INTEGER | Estouro de valores grandes |
Tipos alternativos
Alguns tipos .NET podem ser lidos a partir de tipos alternativos do SQLite. Os parâmetros também podem ser configurados para usar esses tipos alternativos. Para obter mais informações, confira Parâmetros.
| .NET | SQLite | Observações |
|---|---|---|
| Char | INTEGER | UTF-16 |
| DateOnly | REAL | Valor do dia juliano |
| DateTime | REAL | Valor do dia juliano |
| DateTimeOffset | REAL | Valor do dia juliano |
| Guid | BLOB | |
| TimeOnly | REAL | Em dias |
| TimeSpan | REAL | Em dias |
Por exemplo, a consulta a seguir lê um valor TimeSpan de uma REAL coluna no conjunto de resultados.
command.CommandText =
@"
SELECT name, julianday(finished) - julianday(started) AS length
FROM task
WHERE finished IS NOT NULL
";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var name = reader.GetString(0);
var length = reader.GetTimeSpan(1);
Console.WriteLine($"'{name}' took {length}.");
}
}
Tipos de coluna
O SQLite usa um sistema de tipo dinâmico em que o tipo de valor está associado ao valor em si e não à coluna em que ele é armazenado. Você é livre para usar qualquer nome de tipo de coluna desejado. Microsoft.Data.Sqlite não aplicará nenhuma semântica adicional a esses nomes.
O nome do tipo de coluna tem um impacto na afinidade de tipo. Um problema comum é que o uso de um tipo de coluna STRING tentará converter os valores para INTEGER ou REAL, o que pode levar a resultados inesperados. Recomendamos usar apenas os quatro nomes de tipo SQLite primitivos: INTEGER, , REALe TEXTBLOB.
O SQLite permite especificar facetas de tipo como comprimento, precisão e escala, mas elas não são impostas pelo mecanismo de banco de dados. Seu aplicativo é responsável por aplicá-los.