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.
Il existe deux API pour récupérer les métadonnées dans ADO.NET. L’un récupère les métadonnées sur les 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 de résultat de requête
Vous pouvez récupérer des métadonnées sur les résultats d’une requête à l’aide de la GetSchemaTable méthode sur SqliteDataReader. Le retour DataTable contient les colonnes suivantes :
| Colonne | Catégorie | Descriptif |
|---|---|---|
AllowDBNull |
Booléen | True si la colonne d’origine peut être NULL. |
BaseCatalogName |
Chaîne | Nom de la base de données de la colonne d’origine. Toujours NULL pour les expressions. |
BaseColumnName |
Chaîne | Nom sans alias de la colonne d’origine. Toujours NULL pour les expressions. |
BaseSchemaName |
Chaîne | Toujours NULL. SQLite ne prend pas en charge les schémas. |
BaseServerName |
Chaîne | Chemin d’accès au fichier de base de données spécifié dans la chaîne de connexion. |
BaseTableName |
Chaîne | Nom de la table de la colonne d’origine. Toujours NULL pour les expressions. |
ColumnName |
Chaîne | Nom ou alias de la colonne dans le jeu de résultats. |
ColumnOrdinal |
Int32 | 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 |
Catégorie | Type de données .NET par défaut de la colonne. |
DataTypeName |
Chaîne | Type de données SQLite de la colonne. |
IsAliased |
Booléen | True si le nom de colonne possède un alias dans le jeu de résultats. |
IsAutoIncrement |
Booléen | True si la colonne d’origine a été créée avec le mot clé AUTOINCREMENT. |
IsExpression |
Booléen | True si la colonne provient d’une expression dans la requête. |
IsKey |
Booléen | True si la colonne d’origine fait partie de la CLÉ PRIMAIRE. |
IsUnique |
Booléen | 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 montre comment créer GetSchemaTable 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ée 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 de la table 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';