Metadata (Sqlite)
Pro načítání metadat v ADO.NET existují dvě rozhraní API. Jeden načte metadata o výsledcích dotazu. Druhý načte metadata o schématu databáze.
Metadata výsledků dotazu
Metadata o výsledcích dotazu můžete načíst pomocí GetSchemaTable metody on SqliteDataReader
. Vrácená DataTable hodnota obsahuje následující sloupce:
Column | Type | Popis |
---|---|---|
AllowDBNull |
Logické | Hodnota True, pokud sloupec původu může mít hodnotu NULL. |
BaseCatalogName |
String | Název databáze původního sloupce. Vždy NULL pro výrazy. |
BaseColumnName |
String | Unaliased name of the origin column. Vždy NULL pro výrazy. |
BaseSchemaName |
String | Vždy NULL. SQLite nepodporuje schémata. |
BaseServerName |
String | Cesta k databázovému souboru zadanému v připojovací řetězec. |
BaseTableName |
String | Název původní tabulky sloupce. Vždy NULL pro výrazy. |
ColumnName |
String | Název nebo alias sloupce v sadě výsledků |
ColumnOrdinal |
Int32 | Pořadové číslo sloupce v sadě výsledků. |
ColumnSize |
Int32 | Vždy -1. To se může změnit v budoucích verzích .Microsoft.Data.Sqlite |
DataType |
Typ | Výchozí datový typ .NET sloupce. |
DataTypeName |
String | Datový typ SQLite sloupce. |
IsAliased |
Logická hodnota | Hodnota True, pokud je název sloupce aliasovaný v sadě výsledků. |
IsAutoIncrement |
Logická hodnota | Hodnota True, pokud byl sloupec původu vytvořen pomocí klíčového slova AUTOINCREMENT. |
IsExpression |
Logická hodnota | Hodnota True, pokud sloupec pochází z výrazu v dotazu. |
IsKey |
Logická hodnota | Hodnota True, pokud je sloupec původu součástí PRIMÁRNÍHO KLÍČE. |
IsUnique |
Logická hodnota | Hodnota True, pokud je sloupec původu JEDINEČNÝ. |
NumericPrecision |
Int16 | Vždy NULL. To se může změnit v budoucích verzích .Microsoft.Data.Sqlite |
NumericScale |
Int16 | Vždy NULL. To se může změnit v budoucích verzích .Microsoft.Data.Sqlite |
Následující příklad ukazuje, jak použít GetSchemaTable
k vytvoření ladicího řetězce, který zobrazuje metadata o výsledku:
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();
Tento dotaz by například vytvořil následující ladicí řetězec:
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
Metadata schématu
Microsoft.Data.Sqlite neimplementuje metodu GetSchema ve službě Db Připojení ion. Místo toho můžete dotazovat přímo na informace o schématu pomocí tabulek sqlite_master a příkazů PRAGMA, jako jsou table_info a foreign_key_list.
Tento dotaz například načte metadata o všech sloupcích v databázi.
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';