Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Istnieją dwa interfejsy API do pobierania metadanych w ADO.NET. Pobiera metadane dotyczące wyników zapytania. Inne pobiera metadane dotyczące schematu bazy danych.
Metadane wyników zapytania
Metadane dotyczące wyników zapytania można pobrać przy użyciu GetSchemaTable metody w pliku SqliteDataReader. Zwrócona kolumna DataTable zawiera następujące kolumny:
| Kolumna | Typ | Opis |
|---|---|---|
AllowDBNull |
logiczny | Wartość True, jeśli kolumna źródła może mieć wartość NULL. |
BaseCatalogName |
Sznurek | Nazwa bazy danych kolumny pochodzenia. Zawsze wartość NULL dla wyrażeń. |
BaseColumnName |
Sznurek | Nieprzyzwajona nazwa kolumny źródła. Zawsze wartość NULL dla wyrażeń. |
BaseSchemaName |
Sznurek | Zawsze ma wartość NULL. SqLite nie obsługuje schematów. |
BaseServerName |
Sznurek | Ścieżka do pliku bazy danych określona w parametrach połączenia. |
BaseTableName |
Sznurek | Nazwa tabeli, do której należy kolumna pochodzenia. Zawsze wartość NULL dla wyrażeń. |
ColumnName |
Sznurek | Nazwa lub alias kolumny w zestawie wyników. |
ColumnOrdinal |
Int32 | Indeks kolumny w zestawie wyników. |
ColumnSize |
Int32 | Zawsze -1. Może to ulec zmianie w przyszłych wersjach programu Microsoft.Data.Sqlite. |
DataType |
Typ | Domyślny typ danych kolumny w .NET. |
DataTypeName |
Sznurek | Typ danych SQLite kolumny. |
IsAliased |
logiczny | Wartość True, jeśli nazwa kolumny jest aliasowana w zestawie wyników. |
IsAutoIncrement |
logiczny | Wartość True, jeśli kolumna źródła została utworzona za pomocą słowa kluczowego AUTOINCREMENT. |
IsExpression |
logiczny | Prawda, jeśli kolumna pochodzi z wyrażenia w zapytaniu. |
IsKey |
logiczny | Prawda, jeśli kolumna źródłowa jest częścią KLUCZA GŁÓWNEGO. |
IsUnique |
logiczny | Wartość True, jeśli kolumna źródła ma wartość UNIQUE. |
NumericPrecision |
Int16 | Zawsze ma wartość NULL. Może to ulec zmianie w przyszłych wersjach programu Microsoft.Data.Sqlite. |
NumericScale |
Int16 | Zawsze ma wartość NULL. Może to ulec zmianie w przyszłych wersjach programu Microsoft.Data.Sqlite. |
W poniższym przykładzie pokazano, jak użyć GetSchemaTable do utworzenia łańcucha znaków debugowania, który pokazuje metadane dotyczące wyniku.
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();
Na przykład to zapytanie spowoduje wygenerowanie następującego ciągu debugowania:
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
Metadane schematu
Microsoft.Data.Sqlite nie implementuje metody GetSchema w dbConnection. Zamiast tego można wykonywać zapytania bezpośrednio w celu uzyskania informacji o schemacie przy użyciu tabel sqlite_master i instrukcji PRAGMA, takich jak table_info i foreign_key_list.
Na przykład to zapytanie pobierze metadane dotyczące wszystkich kolumn w bazie danych.
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';