Metadata (Sqlite)
Det finns två API:er för att hämta metadata i ADO.NET. En hämtar metadata om frågeresultat. Den andra hämtar metadata om databasschemat.
Metadata för frågeresultat
Du kan hämta metadata om resultatet av en fråga med hjälp av metoden på GetSchemaTable SqliteDataReader
. Den returnerade DataTable innehåller följande kolumner:
Column | Type | Beskrivning |
---|---|---|
AllowDBNull |
Booleskt | Sant om ursprungskolumnen kan vara NULL. |
BaseCatalogName |
String | Namnet på ursprungskolumnens databas. Alltid NULL för uttryck. |
BaseColumnName |
String | Ursprungskolumnens namn som inte har samma namn. Alltid NULL för uttryck. |
BaseSchemaName |
String | Alltid NULL. SQLite stöder inte scheman. |
BaseServerName |
String | Sökvägen till databasfilen som anges i anslutningssträng. |
BaseTableName |
String | Namnet på ursprungskolumnens tabell. Alltid NULL för uttryck. |
ColumnName |
String | Namnet eller aliaset för kolumnen i resultatuppsättningen. |
ColumnOrdinal |
Int32 | Ordningstalet för kolumnen i resultatuppsättningen. |
ColumnSize |
Int32 | Alltid -1. Detta kan ändras i framtida versioner av Microsoft.Data.Sqlite . |
DataType |
Typ | Standarddatatypen .NET för kolumnen. |
DataTypeName |
String | SQLite-datatypen för kolumnen. |
IsAliased |
Booleskt | Sant om kolumnnamnet är alias i resultatuppsättningen. |
IsAutoIncrement |
Booleskt | Sant om ursprungskolumnen skapades med nyckelordet AUTOINCREMENT. |
IsExpression |
Booleskt | Sant om kolumnen kommer från ett uttryck i frågan. |
IsKey |
Booleskt | Sant om ursprungskolumnen är en del av primärnyckeln. |
IsUnique |
Booleskt | Sant om ursprungskolumnen är UNIK. |
NumericPrecision |
Int16 | Alltid NULL. Detta kan ändras i framtida versioner av Microsoft.Data.Sqlite . |
NumericScale |
Int16 | Alltid NULL. Detta kan ändras i framtida versioner av Microsoft.Data.Sqlite . |
I följande exempel visas hur du använder GetSchemaTable
för att skapa en felsökningssträng som visar metadata om ett resultat:
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();
Den här frågan skulle till exempel generera följande felsökningssträng:
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
Schemametadata
Microsoft.Data.Sqlite implementerar inte metoden GetSchema i Db Anslut ion. I stället kan du fråga direkt efter schemainformation med hjälp av sqlite_master-tabellen och PRAGMA-instruktioner som table_info och foreign_key_list.
Den här frågan hämtar till exempel metadata om alla kolumner i databasen.
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';