Partager via


Types de données

SQLite possède uniquement quatre types de données primitifs : INTEGER, REAL, TEXT et BLOB. Les API qui retournent des valeurs de base de données en tant que object seules ne retourneront jamais l’un de ces quatre types. D’autres types .NET sont pris en charge par Microsoft.Data.Sqlite, mais les valeurs sont finalement coercées entre ces types et l’un des quatre types primitifs.

.FILET SQLite Remarques
Booléen ENTIER 0 ou 1
Octet ENTIER
Octet[] Objet Binaire de Grande Taille (BLOB)
Carboniser SMS UTF-8
DateOnly SMS aaaa-MM-jj
Date et heure SMS aaaa-MM-jj HH :mm :ss. FFFFFFF
DateTimeOffset SMS aaaa-MM-jj HH :mm :ss. FFFFFFFzzz
Décimal SMS 0.0########################### format. REAL serait perdu.
Double RÉEL
Guide SMS 00000000-0000-0000-0000-000000000000
Int16 ENTIER
Int32 ENTIER
Int64 ENTIER
SByte ENTIER
Célibataire RÉEL
Chaîne SMS UTF-8
TimeOnly SMS HH :mm :ss.fffffff
TimeSpan SMS d.hh :mm :ss.fffffff
UInt16 ENTIER
UInt32 ENTIER
UInt64 ENTIER Dépassement de capacité des valeurs volumineuses

Autres types

Certains types .NET peuvent être lus à partir d’autres types SQLite. Les paramètres peuvent également être configurés pour utiliser ces types alternatifs. Pour plus d’informations, consultez Paramètres.

.FILET SQLite Remarques
Carboniser ENTIER UTF-16
DateOnly RÉEL Valeur de jour du calendrier julien
Date et heure RÉEL Valeur de jour du calendrier julien
DateTimeOffset RÉEL Valeur de jour du calendrier julien
Guide Objet Binaire de Grande Taille (BLOB)
TimeOnly RÉEL En jours
TimeSpan RÉEL En jours

Par exemple, la requête suivante lit une valeur TimeSpan à partir d’une colonne REAL dans le jeu de résultats.

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}.");
    }
}

Types de colonnes

SQLite utilise un système de type dynamique où le type d’une valeur est associé à la valeur elle-même et non à la colonne où elle est stockée. Vous êtes libre d’utiliser le nom de type de colonne souhaité. Microsoft.Data.Sqlite n’applique aucune sémantique supplémentaire à ces noms.

Le nom du type de colonne a un impact sur l’affinité de type. Un gotcha courant est que l’utilisation d’un type de colonne string essaie de convertir des valeurs en INTEGER ou REAL, ce qui peut entraîner des résultats inattendus. Nous vous recommandons d’utiliser uniquement les quatre noms de type SQLite primitifs : INTEGER, REAL, TEXT et BLOB.

SQLite vous permet de spécifier des facettes de type telles que la longueur, la précision et l’échelle, mais elles ne sont pas appliquées par le moteur de base de données. Votre application est chargée de les appliquer.

Voir aussi