Metagegevens (Sqlite)
Er zijn twee API's voor het ophalen van metagegevens in ADO.NET. Eén haalt metagegevens over queryresultaten op. De andere haalt metagegevens over het databaseschema op.
Metagegevens van queryresultaten
U kunt metagegevens over de resultaten van een query ophalen met behulp van de GetSchemaTable methode op SqliteDataReader
. De geretourneerde DataTable bevat de volgende kolommen:
Column | Type | Beschrijving |
---|---|---|
AllowDBNull |
Booleaanse waarde | Waar als de oorspronkelijke kolom NULL kan zijn. |
BaseCatalogName |
String | De naam van de database van de oorspronkelijke kolom. Altijd NULL voor expressies. |
BaseColumnName |
String | De niet-gealiaseerde naam van de oorspronkelijke kolom. Altijd NULL voor expressies. |
BaseSchemaName |
String | Altijd NULL. SQLite biedt geen ondersteuning voor schema's. |
BaseServerName |
String | Het pad naar het databasebestand dat is opgegeven in de verbindingsreeks. |
BaseTableName |
String | De naam van de tabel van de oorspronkelijke kolom. Altijd NULL voor expressies. |
ColumnName |
String | De naam of alias van de kolom in de resultatenset. |
ColumnOrdinal |
Int32 | Het rangnummer van de kolom in de resultatenset. |
ColumnSize |
Int32 | Altijd -1. Dit kan veranderen in toekomstige versies van Microsoft.Data.Sqlite . |
DataType |
Type | Het standaard .NET-gegevenstype van de kolom. |
DataTypeName |
String | Het gegevenstype SQLite van de kolom. |
IsAliased |
Booleaanse waarde | Waar als de kolomnaam een alias heeft in de resultatenset. |
IsAutoIncrement |
Booleaanse waarde | Waar als de oorspronkelijke kolom is gemaakt met het trefwoord AUTOINCREMENT. |
IsExpression |
Booleaanse waarde | Waar als de kolom afkomstig is van een expressie in de query. |
IsKey |
Booleaanse waarde | Waar als de oorspronkelijke kolom deel uitmaakt van de PRIMAIRE SLEUTEL. |
IsUnique |
Booleaanse waarde | Waar als de oorspronkelijke kolom UNIEK is. |
NumericPrecision |
Int16 | Altijd NULL. Dit kan veranderen in toekomstige versies van Microsoft.Data.Sqlite . |
NumericScale |
Int16 | Altijd NULL. Dit kan veranderen in toekomstige versies van Microsoft.Data.Sqlite . |
In het volgende voorbeeld ziet u hoe GetSchemaTable
u een foutopsporingstekenreeks maakt waarin metagegevens over een resultaat worden weergegeven:
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();
Met deze query wordt bijvoorbeeld de volgende foutopsporingstekenreeks geproduceerd:
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
Schemametagegevens
Microsoft.Data.Sqlite implementeert de GetSchema-methode niet op Db Verbinding maken ion. In plaats daarvan kunt u rechtstreeks query's uitvoeren op schemagegevens met behulp van de sqlite_master tabel- en PRAGMA-instructies, zoals table_info en foreign_key_list.
Met deze query worden bijvoorbeeld metagegevens opgehaald over alle kolommen in de database.
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';