Métadonnées (Sqlite)
Il existe deux API pour récupérer des métadonnées dans ADO.NET. L’une récupère les métadonnées relatives aux résultats de la requête. L’autre récupère les métadonnées relatives au schéma de base de données.
Métadonnées relatives aux résultats de la requête
Vous pouvez récupérer des métadonnées relatives aux résultats d’une requête à l’aide de la méthode GetSchemaTable sur SqliteDataReader
. Le DataTable retourné contient les colonnes suivantes :
Colonne | Type | Description |
---|---|---|
AllowDBNull |
Boolean | True si la colonne d’origine peut être NULL. |
BaseCatalogName |
String | Le nom de la base de données de la colonne d’origine. Toujours NULL pour les expressions. |
BaseColumnName |
String | Le nom sans alias de la colonne d’origine. Toujours NULL pour les expressions. |
BaseSchemaName |
String | Toujours NULL. SQLite ne prend pas en charge les schémas. |
BaseServerName |
String | Le chemin d’accès au fichier de base de données spécifié dans la chaîne de connexion. |
BaseTableName |
String | Le nom du tableau de la colonne d’origine. Toujours NULL pour les expressions. |
ColumnName |
String | Le nom ou alias de la colonne dans le jeu de résultats. |
ColumnOrdinal |
Int32 | L’ordinal de la colonne dans le jeu de résultats. |
ColumnSize |
Int32 | Toujours -1. Cela peut changer dans les futures versions de Microsoft.Data.Sqlite . |
DataType |
Type | Le type de données .NET par défaut de la colonne. |
DataTypeName |
String | Le type de données SQLite de la colonne. |
IsAliased |
Boolean | True si le nom de la colonne a un alias dans le jeu de résultats. |
IsAutoIncrement |
Boolean | True si la colonne d’origine a été créée avec le mot clé AUTOINCREMENT. |
IsExpression |
Boolean | True si la colonne provient d’une expression dans la requête. |
IsKey |
Boolean | True si la colonne d’origine fait partie de la CLÉ PRIMAIRE. |
IsUnique |
Boolean | True si la colonne d’origine est UNIQUE. |
NumericPrecision |
Int16 | Toujours NULL. Cela peut changer dans les futures versions de Microsoft.Data.Sqlite . |
NumericScale |
Int16 | Toujours NULL. Cela peut changer dans les futures versions de Microsoft.Data.Sqlite . |
L’exemple suivant illustre comment utiliser GetSchemaTable
pour créer une chaîne de débogage qui affiche les métadonnées relatives à un résultat :
var builder = new StringBuilder();
var schemaTable = reader.GetSchemaTable();
foreach (DataRow column in schemaTable.Rows)
{
if ((bool)column[SchemaTableColumn.IsExpression])
{
builder.Append("(expression)");
}
else
{
builder.Append(column[SchemaTableColumn.BaseTableName])
.Append(".")
.Append(column[SchemaTableColumn.BaseColumnName]);
}
builder.Append(" ");
if ((bool)column[SchemaTableColumn.IsAliased])
builder.Append("AS ")
.Append(column[SchemaTableColumn.ColumnName])
.Append(" ");
builder.Append(column["DataTypeName"])
.Append(" ");
if (column[SchemaTableColumn.AllowDBNull] as bool? == false)
builder.Append("NOT NULL ");
if (column[SchemaTableColumn.IsKey] as bool? == true)
builder.Append("PRIMARY KEY ");
if (column[SchemaTableOptionalColumn.IsAutoIncrement] as bool? == true)
builder.Append("AUTOINCREMENT ");
if (column[SchemaTableColumn.IsUnique] as bool? == true)
builder.Append("UNIQUE ");
builder.AppendLine();
}
var debugString = builder.ToString();
Par exemple, cette requête produit la chaîne de débogage suivante :
SELECT id AS post_id,
title,
body,
random() AS random
FROM post
post.id AS post_id INTEGER PRIMARY KEY AUTOINCREMENT
post.title TEXT NOT NULL UNIQUE
post.body TEXT
(expression) AS random BLOB
Métadonnées de schéma
Microsoft.Data.Sqlite n’implémente pas la méthode GetSchema sur DbConnection. Au lieu de cela, vous pouvez interroger directement des informations de schéma à l’aide du tableau sqlite_master et des instructions PRAGMA comme table_info et foreign_key_list.
Par exemple, cette requête récupère les métadonnées sur toutes les colonnes de la base de données.
SELECT t.name AS tbl_name, c.name, c.type, c.notnull, c.dflt_value, c.pk
FROM sqlite_master AS t,
pragma_table_info(t.name) AS c
WHERE t.type = 'table';