Metadaten (Sqlite)
Es gibt zwei APIs zum Abrufen von Metadaten in ADO.NET. Die eine RUFT Metadaten zu Abfrageergebnissen ab, die andere ruft Metadaten über das Datenbankschema ab.
Metadaten für Abfrageergebnisse
Mithilfe der GetSchemaTable-Methode in SqliteDataReader
können Sie Metadaten zu den Ergebnissen einer Abfrage abrufen. Die zurückgegebene DataTable-Klasse enthält die folgenden Spalten:
Spalte | Type | Beschreibung |
---|---|---|
AllowDBNull |
Boolesch | true, wenn die Ursprungsspalte möglicherweise NULL ist |
BaseCatalogName |
Zeichenfolge | Der Datenbankname der Ursprungsspalte, für Ausdrücke immer NULL |
BaseColumnName |
Zeichenfolge | Der Name der Ursprungsspalte ohne Alias, für Ausdrücke immer NULL |
BaseSchemaName |
Zeichenfolge | Immer NULL, SQLite unterstützt keine Schemas. |
BaseServerName |
Zeichenfolge | Der Pfad zur Datenbankdatei, der in der Verbindungszeichenfolge angegeben ist |
BaseTableName |
Zeichenfolge | Der Tabellenname der Ursprungsspalte, für Ausdrücke immer NULL |
ColumnName |
Zeichenfolge | Der Name oder Alias der Spalte im Resultset |
ColumnOrdinal |
Int32 | Die Ordnungszahl der Spalte im Resultset |
ColumnSize |
Int32 | Immer -1, kann sich in zukünftigen Versionen von Microsoft.Data.Sqlite ändern |
DataType |
Typ | Der .NET-Standard-Datentyp der Spalte |
DataTypeName |
Zeichenfolge | Der SQLite-Datentyp der Spalte |
IsAliased |
Boolesch | true, wenn der Spaltenname im Resultset ein Alias ist. |
IsAutoIncrement |
Boolesch | true, wenn die Ursprungsspalte mit dem AUTOINCREMENT-Schlüsselwort erstellt wurde |
IsExpression |
Boolesch | true, wenn die Spalte aus einem Ausdruck in der Abfrage stammt |
IsKey |
Boolesch | true, wenn die Ursprungsspalte Teil von PRIMARY KEY ist |
IsUnique |
Boolesch | true, wenn die Ursprungsspalte UNIQUE ist |
NumericPrecision |
Int16 | Immer NULL, kann sich in zukünftigen Versionen von Microsoft.Data.Sqlite ändern |
NumericScale |
Int16 | Immer NULL, kann sich in zukünftigen Versionen von Microsoft.Data.Sqlite ändern |
Im folgenden Beispiel wird veranschaulicht, wie GetSchemaTable
verwendet wird, um eine Debugzeichenfolge zu erstellen, die Metadaten zu einem Ergebnis anzeigt:
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();
Diese Abfrage erzeugt z. B. die folgende Debugzeichenfolge:
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
Metadaten für Schemas
Microsoft.Data.Sqlite implementiert die GetSchema-Methode nicht in DbConnection. Stattdessen können Sie mithilfe der Tabelle sqlite_master und Pragmaanweisungen wie table_info und foreign_key_list direkte Abfragen für Schemainformationen ausführen.
Diese Abfrage ruft z. B. Metadaten zu allen Spalten in der Datenbank ab.
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';