Metadados (Sqlite)
Há duas APIs para recuperar metadados em ADO.NET. Uma recupera metadados sobre resultados de consultas. A outra recupera metadados sobre o esquema de banco de dados.
Metadados de resultado de consulta
Você pode recuperar metadados sobre os resultados de uma consulta usando o método GetSchemaTable em SqliteDataReader
. O DataTable retornado contém as colunas a seguir:
Coluna | Type | Descrição |
---|---|---|
AllowDBNull |
Boolean | True se a coluna de origem pode ser NULL. |
BaseCatalogName |
String | O nome do banco de dados da coluna de origem. Sempre NULL para expressões. |
BaseColumnName |
String | O nome sem alias da coluna de origem. Sempre NULL para expressões. |
BaseSchemaName |
String | Sempre NULL. O SQLite não dá suporte a esquemas. |
BaseServerName |
String | O caminho para o arquivo de banco de dados especificado na cadeia de conexão. |
BaseTableName |
String | O nome da tabela da coluna de origem. Sempre NULL para expressões. |
ColumnName |
String | O nome ou alias da coluna no conjunto de resultados. |
ColumnOrdinal |
Int32 | O ordinal da coluna no conjunto de resultados. |
ColumnSize |
Int32 | Sempre -1. Isso pode mudar em versões futuras do Microsoft.Data.Sqlite . |
DataType |
Tipo | O tipo de dados do .NET padrão da coluna. |
DataTypeName |
String | O tipo de dados do SQLite da coluna. |
IsAliased |
Booliano | True se o nome da coluna for com alias no conjunto de resultados. |
IsAutoIncrement |
Booliano | True se a coluna de origem foi criada com a palavra-chave AUTOINCREMENT. |
IsExpression |
Booliano | True se a coluna se origina de uma expressão na consulta. |
IsKey |
Booliano | True se a coluna de origem fizer parte da PRIMARY KEY. |
IsUnique |
Booliano | True se a coluna de origem for UNIQUE. |
NumericPrecision |
Int16 | Sempre NULL. Isso pode mudar em versões futuras do Microsoft.Data.Sqlite . |
NumericScale |
Int16 | Sempre NULL. Isso pode mudar em versões futuras do Microsoft.Data.Sqlite . |
O exemplo a seguir mostra como usar GetSchemaTable
para criar uma cadeia de caracteres de depuração que mostra metadados sobre um resultado:
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();
Por exemplo, essa consulta produziria a seguinte cadeia de caracteres de depuração:
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
Metadados de esquema
O Microsoft.Data.Sqlite não implementa o método GetSchema no DbConnection. Em vez disso, você pode consultar diretamente informações de esquema usando a tabela sqlite_master e instruções PRAGMA, como table_info e foreign_key_list.
Por exemplo, essa consulta recuperará metadados sobre todas as colunas no banco de dados.
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';