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:
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';
Källan för det här innehållet finns på GitHub, där du även kan skapa och granska ärenden och pull-begäranden. Se vår deltagarguide för mer information.
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback:
Administrera en SQL Server-databasinfrastruktur för molndatabaser, lokala databaser och hybridrelationsdatabaser med hjälp av microsoft PaaS-relationsdatabaserbjudanden.