Delen via


Data types

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 waarden worden uiteindelijk tussen deze typen en een van de vier primitieve typen gecodeerd.

.NET SQLite Opmerkingen
Booleaanse waarde GEHEEL GETAL 0 of 1
Byte GEHEEL GETAL
Byte[] BLOB
Char TEKST UTF-8
DateOnly TEKST jjjj-MM-dd
Datum en tijd TEKST jjjj-MM-dd uu:mm:ss. FFFFFFF
DateTimeOffset TEKST jjjj-MM-dd uu:mm:ss. FFFFFFFzzz
Decimal TEKST 0.0########################### Formaat. REAL zou verliesachtig zijn.
Dubbel ECHTE
Guid TEKST 00000000-0000-0000-0000-000000000000
Int16 GEHEEL GETAL
Int32 GEHEEL GETAL
Int64 GEHEEL GETAL
SByte GEHEEL GETAL
Eén ECHTE
String TEKST UTF-8
TimeOnly TEKST UU:mm:ss.fffffff
TimeSpan 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
Char GEHEEL GETAL UTF-16
DateOnly ECHTE Juliaanse dagwaarde
Datum en tijd ECHTE Juliaanse dagwaarde
DateTimeOffset ECHTE Juliaanse dagwaarde
Guid BLOB
TimeOnly ECHTE In dagen
TimeSpan ECHTE 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 afdwingen van deze apps.

Zie ook