Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
| Sloupec | Typ | Popis |
|---|---|---|
AllowDBNull |
logický | Hodnota True, pokud sloupec původu může mít hodnotu NULL. |
BaseCatalogName |
Řetězec | Název databáze původního sloupce. Vždy NULL pro výrazy. |
BaseColumnName |
Řetězec | Nealiasovaný název původního sloupce. Vždy NULL pro výrazy. |
BaseSchemaName |
Řetězec | Vždy NULL. SQLite nepodporuje schémata. |
BaseServerName |
Řetězec | Cesta k databázovému souboru zadanému v připojovacím řetězci. |
BaseTableName |
Řetězec | Název původní tabulky sloupce. Vždy NULL pro výrazy. |
ColumnName |
Řetězec | 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íchMicrosoft.Data.Sqlite. |
DataType |
Typ | Výchozí datový typ .NET sloupce. |
DataTypeName |
Řetězec | Datový typ SQLite sloupce. |
IsAliased |
logický | Hodnota True, pokud je název sloupce aliasovaný v sadě výsledků. |
IsAutoIncrement |
logický | Hodnota True, pokud byl sloupec původu vytvořen pomocí klíčového slova AUTOINCREMENT. |
IsExpression |
logický | Hodnota True, pokud sloupec pochází z výrazu v dotazu. |
IsKey |
logický | Hodnota True, pokud je sloupec původu součástí PRIMÁRNÍHO KLÍČE. |
IsUnique |
logický | Hodnota True, pokud je sloupec původu JEDINEČNÝ. |
NumericPrecision |
Int16 | Vždy NULL. To se může změnit v budoucích verzíchMicrosoft.Data.Sqlite. |
NumericScale |
Int16 | Vždy NULL. To se může změnit v budoucích verzíchMicrosoft.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();
Například tento dotaz by 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ě DbConnection. Místo toho můžete dotazovat přímo na informace o schématu pomocí tabulky sqlite_master a příkazů PRAGMA, jako 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';