C# .NET 对应 SQLite 的数据类型

SQLite 仅有四个基元数据类型:INTEGER、REAL、TEXT 和 BLOB。 将数据库值返回为 object 的 API 只返回这四种类型之一。 Microsoft.Data.Sqlite 支持其他 .NET 类型,但最终强制这些值在这些类型和四种基元类型中的一种类型之间进行转换。

.NETSQLite备注
BooleanINTEGER0 或 1
ByteINTEGER
Byte[]BLOB
CharTEXTUTF-8
DateOnlyTEXTyyyy-MM-dd
DateTimeTEXTyyyy-MM-dd HH:mm:ss.FFFFFFF
DateTimeOffsetTEXTyyyy-MM-dd HH:mm:ss.FFFFFFFzzz
十进制TEXT0.0########################### 格式。 REAL 将有损。
Doublereal
GUIDTEXT00000000-0000-0000-0000-000000000000
Int16INTEGER
Int32INTEGER
Int64INTEGER
SByteINTEGER
Singlereal
StringTEXTUTF-8
TimeOnlyTEXTHH:mm:ss.fffffff
TimeSpanTEXTd.hh:mm:ss.fffffff
UInt16INTEGER
UInt32INTEGER
UInt64INTEGER大值溢出

替代类型

某些 .NET 类型可以从替代 SQLite 类型中读取。 还可以将参数配置为使用这些替代类型。

.NETSQLite备注
CharINTEGERUTF-16
DateOnlyreal儒略日值
DateTimereal儒略日值
DateTimeOffsetreal儒略日值
GUIDBLOB
TimeOnlyreal以天为单位
TimeSpanreal以天为单位

例如,下面的查询从结果集的 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}.");
    }
}