Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SQLite ha solo quattro tipi di dati primitivi: INTEGER, REAL, TEXT e BLOB. Le API che restituiscono valori di database come un object
restituiranno solo uno di questi quattro tipi. I tipi .NET aggiuntivi sono supportati da Microsoft.Data.Sqlite, ma i valori sono in ultima analisi coerciti tra questi tipi e uno dei quattro tipi primitivi.
.RETE | SQLite | Osservazioni: |
---|---|---|
Booleano | NUMERO INTERO |
0 o 1 |
Byte | NUMERO INTERO | |
Byte[] | BLOB | |
Char | TESTO | UTF-8 |
DateOnly | TESTO | aaaa-MM-gg |
Data e ora | TESTO | Aaaa-MM-gg HH:mm:ss. FFFFFFFFF |
DateTimeOffset (struttura per gestire data e ora con fuso orario) | TESTO | Aaaa-MM-gg HH:mm:ss. FFFFFFFzzz |
Decimale | TESTO |
0.0########################### formato. REAL sarebbe una perdita. |
Doppio | REALE | |
Guid | TESTO | 00000000-0000-0000-0000-000000000000 |
Int16 | NUMERO INTERO | |
Int32 | NUMERO INTERO | |
Int64 | NUMERO INTERO | |
SByte | NUMERO INTERO | |
Singolo | REALE | |
Stringa | TESTO | UTF-8 |
TimeOnly | TESTO | HH:mm:ss.fffffffff |
Intervallo di tempo | TESTO | d.hh:mm:ss.fffffffff |
UInt16 | NUMERO INTERO | |
UInt32 | NUMERO INTERO | |
UInt64 | NUMERO INTERO | Overflow di valori di grandi dimensioni |
Tipi alternativi
Alcuni tipi .NET possono essere letti da tipi SQLite alternativi. I parametri possono anche essere configurati per l'uso di questi tipi alternativi. Per altre informazioni, vedere Parametri.
.RETE | SQLite | Osservazioni: |
---|---|---|
Char | NUMERO INTERO | UTF-16 |
DateOnly | REALE | Valore del giorno giuliano |
Data e ora | REALE | Valore del giorno giuliano |
DateTimeOffset (struttura per gestire data e ora con fuso orario) | REALE | Valore del giorno giuliano |
Guid | BLOB | |
TimeOnly | REALE | In giorni |
Intervallo di tempo | REALE | In giorni |
Ad esempio, la query seguente legge un valore TimeSpan da una colonna REAL nel set di risultati.
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}.");
}
}
Tipi di colonna
SQLite usa un sistema di tipi dinamici in cui il tipo di un valore è associato al valore stesso e non alla colonna in cui è archiviato. È possibile usare qualsiasi nome di tipo di colonna desiderato. Microsoft.Data.Sqlite non applicherà alcuna semantica aggiuntiva a questi nomi.
Il nome del tipo di colonna ha un impatto sull'affinità del tipo. Un gotcha comune è che l'uso di un tipo di colonna di STRING tenterà di convertire i valori in INTEGER o REAL, causando risultati imprevisti. È consigliabile usare solo i quattro nomi di tipo SQLite primitivi: INTEGER, REAL, TEXT e BLOB.
SQLite consente di specificare proprietà di tipo come lunghezza, precisione e scala, ma queste non vengono applicate dal motore di database. L'app è responsabile dell'applicazione di questi elementi.