Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
SQLite n’a que quatre types de données primitifs : INTEGER, , REALTEXT, et BLOB. Les API qui retournent des valeurs de base de données sous forme de object ne retourneront que 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.
| .NET | SQLite | Remarques |
|---|---|---|
| Boolean | INTEGER |
0 ou 1 |
| Byte | 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 | Format 0.0###########################.
REAL serait perdu. |
| 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 | j.hh:mm:ss.fffffff |
| UInt16 | INTEGER | |
| UInt32 | INTEGER | |
| UInt64 | INTEGER | Dépassement de grandes valeurs |
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.
| .NET | SQLite | Remarques |
|---|---|---|
| Char | INTEGER | UTF-16 |
| DateOnly | REAL | Valeur du jour julien |
| DateTime | REAL | Valeur du jour julien |
| DateTimeOffset | REAL | Valeur du jour julien |
| Guid | BLOB | |
| TimeOnly | REAL | En jours |
| TimeSpan | REAL | En jours |
Par exemple, la requête suivante lit une valeur TimeSpan à partir d’une REAL colonne 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 de STRING tente 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 types SQLite primitifs : INTEGER, , REALTEXT, 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.