Delen via


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';

Zie ook