Delen via


Gegevenstypen

SQLite heeft slechts vier primitieve gegevenstypen: INTEGER, REAL, TEXT en BLOB. API's die databasewaarden als resultaat object geven, retourneren slechts één van deze vier typen. Aanvullende .NET-typen worden ondersteund door Microsoft.Data.Sqlite, maar uiteindelijk worden waarden omgezet tussen deze typen en een van de vier primitieve typen.

.NET SQLite Opmerkingen
Booleaan GEHEEL GETAL 0 of 1
Byte GEHEEL GETAL
Byte[] BLOB
Verkolen Tekst UTF-8
DateOnly Tekst jjjj-MM-dd
Datum/tijd Tekst jjjj-MM-dd uu:mm:ss. FFFFFFF
DatumTijdOffset Tekst jjjj-MM-dd uu:mm:ss. FFFFFFFzzz
Decimaal Tekst 0.0########################### formaat. REAL zou verliesachtig zijn.
Dubbel WERKELIJK
Guid Tekst 00000000-0000-0000-0000-000000000000
Int16 GEHEEL GETAL
Int32 GEHEEL GETAL
Int64 GEHEEL GETAL
SByte GEHEEL GETAL
Enkel WERKELIJK
Snaar / Touwtje Tekst UTF-8
TimeOnly Tekst uu:mm:ss.fffffff
Tijdsduur Tekst d.hh:mm:ss.fffffffff
UInt16 GEHEEL GETAL
UInt32 GEHEEL GETAL
UInt64 GEHEEL GETAL Overloop van grote waarden

Alternatieve typen

Sommige .NET-typen kunnen worden gelezen uit alternatieve SQLite-typen. Parameters kunnen ook worden geconfigureerd voor het gebruik van deze alternatieve typen. Zie Parameters voor meer informatie.

.NET SQLite Opmerkingen
Verkolen GEHEEL GETAL UTF-16
DateOnly WERKELIJK Juliaanse dagwaarde
Datum/tijd WERKELIJK Juliaanse dagwaarde
DatumTijdOffset WERKELIJK Juliaanse dagwaarde
Guid BLOB
TimeOnly WERKELIJK In dagen
Tijdsduur WERKELIJK In dagen

De volgende query leest bijvoorbeeld een TimeSpan-waarde uit een REAL-kolom in de resultatenset.

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}.");
    }
}

Kolomtypen

SQLite maakt gebruik van een dynamisch typesysteem waarbij het type van een waarde is gekoppeld aan de waarde zelf en niet aan de kolom waarin deze is opgeslagen. U kunt de gewenste kolomtypenaam gebruiken. Microsoft.Data.Sqlite past geen extra semantiek toe op deze namen.

De naam van het kolomtype heeft wel invloed op de typeaffiniteit. Een veelvoorkomende gotcha is dat het gebruik van een kolomtype STRING probeert waarden te converteren naar INTEGER of REAL, wat kan leiden tot onverwachte resultaten. U wordt aangeraden alleen de vier primitieve SQLite-typenamen te gebruiken: INTEGER, REAL, TEXT en BLOB.

Met SQLite kunt u type facets opgeven, zoals lengte, precisie en schaal, maar ze worden niet afgedwongen door de database-engine. Uw app is verantwoordelijk voor het handhaven hiervan.

Zie ook