Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.