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.