Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
| Rubriek | Typologie | Beschrijving |
|---|---|---|
AllowDBNull |
Booleaan | Waar als de oorspronkelijke kolom NULL kan zijn. |
BaseCatalogName |
Snaar / Touwtje | De naam van de database van de oorspronkelijke kolom. Altijd NULL voor uitdrukkingen. |
BaseColumnName |
Snaar / Touwtje | De niet-gealiaseerde naam van de oorspronkelijke kolom. Altijd NULL voor uitdrukkingen. |
BaseSchemaName |
Snaar / Touwtje | Altijd NULL. SQLite biedt geen ondersteuning voor schema's. |
BaseServerName |
Snaar / Touwtje | Het pad naar het databasebestand dat is opgegeven in de verbindingsreeks. |
BaseTableName |
Snaar / Touwtje | De naam van de tabel van de oorspronkelijke kolom. Altijd NULL voor uitdrukkingen. |
ColumnName |
Snaar / Touwtje | 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 |
Typologie | Het standaard .NET-gegevenstype van de kolom. |
DataTypeName |
Snaar / Touwtje | Het gegevenstype SQLite van de kolom. |
IsAliased |
Booleaan | Waar indien de kolomnaam een alias heeft in de resultaatset. |
IsAutoIncrement |
Booleaan | Waar als de oorspronkelijke kolom is gemaakt met het trefwoord AUTOINCREMENT. |
IsExpression |
Booleaan | True als de kolom afkomstig is van een expressie in de query. |
IsKey |
Booleaan | Waar als de oorspronkelijke kolom deel uitmaakt van de PRIMAIRE SLEUTEL. |
IsUnique |
Booleaan | 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 wordt getoond hoe u GetSchemaTable kunt gebruiken om een foutopsporingstekenreeks te maken die metagegevens over een resultaat toont.
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 in DbConnection. 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';