Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
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å GetSchemaTableSqliteDataReader. Den returnerade DataTable innehåller följande kolumner:
| Kolumn | Typ | Beskrivning |
|---|---|---|
AllowDBNull |
Boolesk | Sant om ursprungskolumnen kan vara NULL. |
BaseCatalogName |
Sträng | Namnet på ursprungskolumnens databas. Alltid NULL för uttrycksvärden. |
BaseColumnName |
Sträng | Det oaliariserade namnet på ursprungskolumnen. Alltid NULL för uttrycksvärden. |
BaseSchemaName |
Sträng | Alltid NULL. SQLite stöder inte scheman. |
BaseServerName |
Sträng | Sökvägen till databasfilen som anges i anslutningssträngen. |
BaseTableName |
Sträng | Namnet på ursprungskolumnens tabell. Alltid NULL för uttrycksvärden. |
ColumnName |
Sträng | 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 |
Sträng | SQLite-datatypen för kolumnen. |
IsAliased |
Boolesk | Sant om kolumnnamnet är aliasat i resultatsettet. |
IsAutoIncrement |
Boolesk | Sant om ursprungskolumnen skapades med nyckelordet AUTOINCREMENT. |
IsExpression |
Boolesk | sant om kolumnen kommer från ett uttryck i frågan. |
IsKey |
Boolesk | Sant om ursprungskolumnen är en del av primärnyckeln. |
IsUnique |
Boolesk | 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 DbConnection. 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';