Megosztás:


Adattípusok

Az SQLite-nek csak négy primitív adattípusa van: INTEGER, REAL, TEXTés BLOB. Azok az API-k, amelyek adatbázis-értékeket adnak vissza, mindig csak a négy típus egyikét fogják visszaadni. A Microsoft.Data.Sqlite további .NET-típusokat is támogat, de az értékek végső soron e típusok és a négy primitív típus egyike között vannak kényszerítve.

.NET SQLite Megjegyzések
Boolean INTEGER 0 vagy 1
Byte INTEGER
Byte[] BLOB
Char TEXT UTF-8
DateOnly TEXT yyyy-MM-dd
DateTime TEXT yyyy-MM-dd HH:mm:ss.FFFFFFF
DateTimeOffset TEXT yyyy-MM-dd HH:mm:ss.FFFFFFFzzz
Decimal TEXT 0.0########################### formátum. REAL veszteséges lenne.
Double REAL
Guid TEXT 00000000-0000-0000-0000-000000000000
Int16 INTEGER
Int32 INTEGER
Int64 INTEGER
SByte INTEGER
Single REAL
String TEXT UTF-8
TimeOnly TEXT HH:mm:ss.fffffff
TimeSpan TEXT d.hh:mm:ss.fffffff
UInt16 INTEGER
UInt32 INTEGER
UInt64 INTEGER Nagy értékek túlcsordulnak

Alternatív típusok

Egyes .NET-típusok más SQLite-típusokból is olvashatók. A paraméterek ezen alternatív típusok használatára is konfigurálhatók. További információért lásd: Paraméterek.

.NET SQLite Megjegyzések
Char INTEGER UTF-16
DateOnly REAL Julián napi érték
DateTime REAL Julián napi érték
DateTimeOffset REAL Julián napi érték
Guid BLOB
TimeOnly REAL Néhány napon belül
TimeSpan REAL Néhány napon belül

Az alábbi lekérdezés például egy TimeSpan értéket olvas be az eredményhalmaz egyik REAL oszlopából.

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

Oszloptípusok

Az SQLite olyan dinamikus típusrendszert használ, amelyben az érték típusa magához az értékhez van társítva, nem pedig az oszlophoz, ahol a tároló található. Tetszőleges oszloptípus-nevet használhat. A Microsoft.Data.Sqlite nem alkalmaz további szemantikát ezekre a nevekre.

Az oszloptípus neve hatással van a típus affinitására. A gyakori probléma az, hogy a STRING oszloptípus megpróbálja az értékeket INTEGER vagy REAL típussá konvertálni, ami váratlan eredményeket okozhat. Javasoljuk, hogy csak a négy primitív SQLite-típusnevet használja: INTEGER, REAL, TEXTés BLOB.

Az SQLite lehetővé teszi a típusok olyan aspektusainak megadását, mint a hossz, a pontosság és a skálázás, de az adatbázismotor nem kényszeríti őket. Ezek kikényszerítéséért az alkalmazás felel.

Lásd még