Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Es gibt zwei APIs zum Abrufen von Metadaten in ADO.NET. Eine ruft Metadaten zu Abfrageergebnissen ab. Die andere ruft Metadaten zum Datenbankschema ab.
Abfrageergebnismetadaten
Mithilfe der GetSchemaTable Methode SqliteDataReader
können Sie Metadaten zu den Ergebnissen einer Abfrage abrufen. Die zurückgegebene DataTable Enthält die folgenden Spalten:
Kolumne | Typ | BESCHREIBUNG |
---|---|---|
AllowDBNull |
Boolescher Typ (Boolean) | True, wenn die Ursprungsspalte NULL sein kann. |
BaseCatalogName |
Schnur | Der Datenbankname der Ursprungsspalte, für Ausdrücke immer NULL |
BaseColumnName |
Schnur | Der Name der Ursprungsspalte ohne Alias, für Ausdrücke immer NULL |
BaseSchemaName |
Schnur | Immer NULL. SQLite unterstützt keine Schemas. |
BaseServerName |
Schnur | Der Pfad zu der Datenbankdatei, die in der Verbindungszeichenfolge angegeben ist. |
BaseTableName |
Schnur | Der Tabellenname der Ursprungsspalte, für Ausdrücke immer NULL |
ColumnName |
Schnur | 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 standardmäßige .NET-Datentyp der Spalte. |
DataTypeName |
Schnur | Der SQLite-Datentyp der Spalte. |
IsAliased |
Boolescher Typ (Boolean) | true, wenn der Spaltenname im Resultset ein Alias ist. |
IsAutoIncrement |
Boolescher Typ (Boolean) | True, wenn die Ursprungsspalte mit dem Schlüsselwort AUTOINCREMENT erstellt wurde. |
IsExpression |
Boolescher Typ (Boolean) | True, wenn die Spalte aus einem Ausdruck in der Abfrage stammt. |
IsKey |
Boolescher Typ (Boolean) | true, wenn die Ursprungsspalte Teil von PRIMARY KEY ist |
IsUnique |
Boolescher Typ (Boolean) | 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 |
Das folgende Beispiel zeigt, wie Sie GetSchemaTable
verwenden, 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 würde z. B. die folgende Debugzeichenfolge erzeugen:
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
Schemametadaten
Microsoft.Data.Sqlite implementiert die GetSchema-Methode nicht für DbConnection. Stattdessen können Sie mithilfe der sqlite_master Tabellen- und PRAGMA-Anweisungen wie table_info und foreign_key_list direkt Schemainformationen abfragen.
Diese Abfrage ruft beispielsweise 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';