Condividi tramite


Tipi di dati

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.

Vedere anche