Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
SqLite ma tylko cztery pierwotne typy danych: INTEGER, REAL, TEXTi BLOB. Interfejsy API, które zwracają wartości bazy danych jako object, będą zwracać tylko jeden z tych czterech typów. Dodatkowe typy .NET są obsługiwane przez bibliotekę Microsoft.Data.Sqlite, ale wartości są ostatecznie konwertowane między tymi typami a jednym z czterech typów pierwotnych.
| .NET | SQLite | Uwagi |
|---|---|---|
| Boolean | INTEGER |
0 lub 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########################### format.
REAL byłoby stratą. |
| 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 | Duże wartości prowadzą do przepełnienia |
Typy alternatywne
Niektóre typy platformy .NET można odczytać z alternatywnych typów SQLite. Parametry można również skonfigurować do używania tych typów alternatywnych. Aby uzyskać więcej informacji, zobacz Parametry.
| .NET | SQLite | Uwagi |
|---|---|---|
| Char | INTEGER | UTF-16 |
| DateOnly | REAL | Wartość dnia juliańskiego |
| DateTime | REAL | Wartość dnia juliańskiego |
| DateTimeOffset | REAL | Wartość dnia juliańskiego |
| Guid | BLOB | |
| TimeOnly | REAL | W dniach |
| TimeSpan | REAL | W dniach |
Na przykład następujące zapytanie odczytuje wartość TimeSpan z REAL kolumny w zestawie wyników.
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}.");
}
}
Typy kolumn
SqLite używa dynamicznego systemu typów, w którym typ wartości jest skojarzony z samą wartością, a nie z kolumną, w której jest przechowywany. Możesz używać dowolnej nazwy typu kolumny. Microsoft.Data.Sqlite nie będzie stosować żadnych dodatkowych semantyki do tych nazw.
Nazwa typu kolumny faktycznie ma wpływ na powiązanie typu. Jedną z typowych gotcha jest to, że użycie typu kolumny STRING spróbuje przekonwertować wartości na INTEGER lub REAL, co może prowadzić do nieoczekiwanych wyników. Zalecamy używanie tylko czterech pierwotnych nazw typów SQLite: INTEGER, , REALTEXTi BLOB.
SQLite umożliwia określenie aspektów typu, takich jak długość, precyzja i skala, ale nie są one wymuszane przez silnik bazy danych. Aplikacja jest odpowiedzialna za wymuszanie tych czynności.