Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует два API для получения метаданных в ADO.NET. Один извлекает метаданные о результатах запроса. Другой извлекает метаданные о схеме базы данных.
Метаданные результатов запроса
Вы можете получить метаданные о результатах запроса с помощью GetSchemaTable метода SqliteDataReader
. Возвращенный DataTable содержит следующие столбцы:
колонна | Тип | Описание |
---|---|---|
AllowDBNull |
Булев тип | Значение True, если столбец источника может иметь значение NULL. |
BaseCatalogName |
Струна | Имя базы данных исходного столбца. Всегда NULL для всех выражений. |
BaseColumnName |
Струна | Непсевдонимное имя столбца источника. Всегда NULL для всех выражений. |
BaseSchemaName |
Струна | Всегда NULL. SQLite не поддерживает схемы. |
BaseServerName |
Струна | Путь к файлу базы данных, указанному в строке подключения. |
BaseTableName |
Струна | Имя таблицы, к которой относится исходный столбец. Всегда NULL для всех выражений. |
ColumnName |
Струна | Имя или псевдоним столбца в результирующем наборе. |
ColumnOrdinal |
Int32 | Порядковый номер столбца в результирующем наборе. |
ColumnSize |
Int32 | Всегда -1. Это может измениться в будущих версиях Microsoft.Data.Sqlite . |
DataType |
Тип | Тип данных .NET по умолчанию столбца. |
DataTypeName |
Струна | Тип данных SQLite столбца. |
IsAliased |
Булев тип | Это истинно, если имя столбца используется как псевдоним в результирующем наборе. |
IsAutoIncrement |
Булев тип | Значение true, если столбец источника был создан с помощью ключевого слова AUTOINCREMENT. |
IsExpression |
Булев тип | True, если столбец берёт начало из выражения в запросе. |
IsKey |
Булев тип | True, если исходный столбец является частью ПЕРВИЧНОГО КЛЮЧА. |
IsUnique |
Булев тип | Истинно, если исходный столбец является уникальным. |
NumericPrecision |
Int16 | Всегда NULL. Это может измениться в будущих версиях Microsoft.Data.Sqlite . |
NumericScale |
Int16 | Всегда NULL. Это может измениться в будущих версиях Microsoft.Data.Sqlite . |
В следующем примере показано, как создать GetSchemaTable
строку отладки, отображающую метаданные о результате:
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();
Например, этот запрос создаст следующую строку отладки:
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
Метаданные схемы
Microsoft.Data.Sqlite не реализует метод GetSchema в DbConnection. Вместо этого можно напрямую запрашивать сведения о схеме с помощью инструкций sqlite_master таблицы и PRAGMA, таких как table_info и foreign_key_list.
Например, этот запрос извлекает метаданные обо всех столбцах базы данных.
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';