Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SQLite имеет только четыре примитивных типа данных: INTEGER, REAL, TEXT и BLOB. API, которые возвращают значения базы данных в виде object
, всегда будут возвращать один из этих четырех типов. Дополнительные типы .NET поддерживаются Microsoft.Data.Sqlite, но значения в конечном итоге приводятся к этим типам или к одному из четырех примитивных типов.
.СЕТЬ | SQLite | Замечания |
---|---|---|
Булев тип | ЦЕЛОЕ ЧИСЛО |
0 или 1 |
Байт | ЦЕЛОЕ ЧИСЛО | |
Байт[] | BLOB-объект | |
Уголь | ТЕКСТ | UTF-8 |
ТолькоДата | ТЕКСТ | гггг-ММ-дд |
дата и время | ТЕКСТ | гггг-ММ-дд ЧЧ:мм:сс. FFFFFFF |
DateTimeOffset (смещение даты и времени) | ТЕКСТ | гггг-ММ-дд ЧЧ:мм:сс. FFFFFFFzzz |
Десятичное число | ТЕКСТ |
0.0########################### формат. REAL будет с потерями. |
Двойной | РЕАЛЬНЫЙ | |
Гид | ТЕКСТ | 00000000-0000-0000-0000-000000000000 |
Int16 | ЦЕЛОЕ ЧИСЛО | |
Int32 | ЦЕЛОЕ ЧИСЛО | |
Int64 | ЦЕЛОЕ ЧИСЛО | |
SByte | ЦЕЛОЕ ЧИСЛО | |
Один | РЕАЛЬНЫЙ | |
Струна | ТЕКСТ | UTF-8 |
TimeOnly | ТЕКСТ | HH:mm:ss.fffffff |
Интервал времени | ТЕКСТ | d.hh:mm:ss.fffffff |
UInt16 | ЦЕЛОЕ ЧИСЛО | |
UInt32 | ЦЕЛОЕ ЧИСЛО | |
UInt64 | ЦЕЛОЕ ЧИСЛО | Переполнение из-за больших значений |
Альтернативные типы
Некоторые типы .NET можно считывать из альтернативных типов SQLite. Параметры также можно настроить для использования этих альтернативных типов. Дополнительные сведения см. в разделе Параметры.
.СЕТЬ | SQLite | Замечания |
---|---|---|
Уголь | ЦЕЛОЕ ЧИСЛО | UTF-16 |
ТолькоДата | РЕАЛЬНЫЙ | Значение дня Джулиана |
дата и время | РЕАЛЬНЫЙ | Значение дня Джулиана |
DateTimeOffset (смещение даты и времени) | РЕАЛЬНЫЙ | Значение дня Джулиана |
Гид | BLOB-объект | |
TimeOnly | РЕАЛЬНЫЙ | В днях |
Интервал времени | РЕАЛЬНЫЙ | В днях |
Например, следующий запрос считывает значение TimeSpan из столбца REAL в результирующем наборе.
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}.");
}
}
Типы столбцов
SQLite использует систему динамического типа, в которой тип значения связан с самим значением, а не столбцом, в котором он хранится. Вы можете использовать любое название типа столбца. Microsoft.Data.Sqlite не будет применять дополнительную семантику к этим именам.
Имя типа столбца влияет на сходство типов. Одна из распространенных ловушек заключается в том, что использование типа столбца STRING будет пытаться преобразовать значения в INTEGER или REAL, что может привести к непредвиденным результатам. Рекомендуется использовать только четыре примитивных имена типов SQLite: INTEGER, REAL, TEXT и BLOB.
SQLite позволяет указать аспекты типа, такие как длина, точность и масштаб, но они не применяются ядром СУБД. Ваше приложение отвечает за применение этих правил.