次の方法で共有


データ型

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 では、長さ、有効桁数、小数点以下桁数などの型ファセットを指定できますが、データベース エンジンでは適用されません。 アプリは、これらを適用する責任を負います。

こちらも参照ください