SQLite には、INTEGER、REAL、TEXT、BLOB の 4 つのプリミティブ データ型しかありません。 データベース値を object
として返す API は、これら 4 つの型のいずれかを返すだけです。 Microsoft.Data.Sqlite では追加の .NET 型がサポートされていますが、最終的には、これらの型と 4 つのプリミティブ型のいずれかとの間で値が強制されます。
。網 | SQLite | 注釈 |
---|---|---|
ボーリアン | 整数 |
0 または 1 |
バイト | 整数 | |
Byte[] | ブロッブ | |
イワナ | [TEXT] | UTF-8 |
DateOnly | [TEXT] | yyyy-MM-dd |
日付と時間 | [TEXT] | yyyy-MM-dd HH:mm:ss.FFFFFFF |
DateTimeOffset (日付と時刻のオフセット) | [TEXT] | yyyy-MM-dd HH:mm:ss.FFFFFFFzzz |
小数 | [TEXT] |
0.0########################### 形式。 REAL は損失を引き出します。 |
ダブル | 実数 | |
Guid | [TEXT] | 00000000-0000-0000-0000-000000000000 |
Int16 | 整数 | |
Int32 | 整数 | |
Int64 | 整数 | |
SByte | 整数 | |
シングル | 実数 | |
糸 | [TEXT] | UTF-8 |
TimeOnly | [TEXT] | HH:mm:ss.fffffff |
タイムスパン | [TEXT] | d.hh:mm:ss.fffffff |
UInt16 | 整数 | |
UInt32 | 整数 | |
UInt64 | 整数 | 大きな値がオーバーフローする |
代替型
一部の .NET 型は、別の SQLite 型から読み取ることができます。 これらの代替型を使用するようにパラメーターを構成することもできます。 詳しくは、「パラメーター」をご覧ください。
。網 | SQLite | 注釈 |
---|---|---|
イワナ | 整数 | UTF-16 |
DateOnly | 実数 | ユリウス日の値 |
日付と時間 | 実数 | ユリウス日の値 |
DateTimeOffset (日付と時刻のオフセット) | 実数 | ユリウス日の値 |
Guid | ブロッブ | |
TimeOnly | 実数 | 日数 |
タイムスパン | 実数 | 日数 |
たとえば、次のクエリでは、結果セットの REAL 列から TimeSpan 値を読み取ります。
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 では、これらの名前に追加のセマンティクスは適用されません。
列名は、 型アフィニティに影響します。 一般的な問題の 1 つは、STRING の列型を使用して値を INTEGER または REAL に変換しようとし、予期しない結果につながる可能性があるということです。 INTEGER、REAL、TEXT、BLOB の 4 つのプリミティブ SQLite 型名のみを使用することをお勧めします。
SQLite では、長さ、有効桁数、小数点以下桁数などの型ファセットを指定できますが、データベース エンジンでは適用されません。 アプリは、これらを適用する責任を負います。
こちらも参照ください
.NET