共用方式為


資料類型

SQLite 只有四種基本資料類型:INTEGER、REAL、TEXT 和 BLOB。 object 傳回資料庫值的 API 只會傳回這四種類型的其中一種。 Microsoft.Data.Sqlite 支援其他 .NET 類型,但最終會在這些類型與四個基本類型之一之間強制轉型值。

.NET SQLite 備註
布林值 INTEGER 01
位元組 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########################### 格式。 REAL 會遺失。
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 大型值溢位

替代型別

有些 .NET 類型可從替代 SQLite 類型讀取。 參數也可以設定為使用這些替代類型。 如需詳細資訊,請參閱參數

.NET SQLite 備註
Char INTEGER UTF-16
DateOnly REAL 凱撒曆日期值
Datetime REAL 凱撒曆日期值
DateTimeOffset REAL 凱撒曆日期值
GUID BLOB
TimeOnly REAL 以天為單位
TimeSpan REAL 於幾天內

例如,下列查詢會從結果集中的 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 不會將任何其他語意套用至這些名稱。

資料行類型名稱會對類型親和性造成影響。 其中一個常見的陷阱是,使用 STRING 的資料行類型會嘗試將值轉換成 INTEGER 或 REAL,這可能會導致非預期的結果。 我們建議只使用四個基本 SQLite 類型名稱:INTEGER、REAL、TEXT 和 BLOB。

SQLite 可讓您指定類型 Facet,例如長度、有效位數和小數位數,但資料庫引擎不會強制執行。 您的應用程式會負責強制執行這些動作。

另請參閱