Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Hay dos API para recuperar metadatos en ADO.NET. Uno recupera metadatos sobre los resultados de la consulta. El otro recupera metadatos sobre el esquema de la base de datos.
Metadatos de resultados de la consulta
Puede recuperar metadatos sobre los resultados de una consulta mediante el GetSchemaTable método en SqliteDataReader. El devuelto DataTable contiene las columnas siguientes:
| Columna | Tipo | Descripción |
|---|---|---|
AllowDBNull |
Booleano | True si la columna de origen puede ser NULL. |
BaseCatalogName |
Cuerda | Nombre de la base de datos de la columna de origen. Siempre es NULL en las expresiones. |
BaseColumnName |
Cuerda | Nombre sin alias de la columna de origen. Siempre es NULL en las expresiones. |
BaseSchemaName |
Cuerda | Siempre es NULL. SQLite no admite esquemas. |
BaseServerName |
Cuerda | Ruta de acceso al archivo de base de datos especificado en la cadena de conexión. |
BaseTableName |
Cuerda | Nombre de la tabla de la columna de origen. Siempre es NULL en las expresiones. |
ColumnName |
Cuerda | Nombre o alias de la columna en el conjunto de resultados. |
ColumnOrdinal |
Int32 | Número ordinal de la columna en el conjunto de resultados. |
ColumnSize |
Int32 | Siempre -1. Esto puede cambiar en versiones futuras de Microsoft.Data.Sqlite. |
DataType |
Tipo | Tipo de datos .NET predeterminado de la columna. |
DataTypeName |
Cuerda | El tipo de datos SQLite de la columna. |
IsAliased |
Booleano | True si el nombre de columna tiene alias en el conjunto de resultados. |
IsAutoIncrement |
Booleano | True si la columna de origen se creó con la palabra clave AUTOINCREMENT. |
IsExpression |
Booleano | True si la columna se origina a partir de una expresión de la consulta. |
IsKey |
Booleano | True si la columna de origen forma parte de PRIMARY KEY. |
IsUnique |
Booleano | True si la columna de origen es UNIQUE. |
NumericPrecision |
Int16 | Siempre es NULL. Esto puede cambiar en versiones futuras de Microsoft.Data.Sqlite. |
NumericScale |
Int16 | Siempre es NULL. Esto puede cambiar en versiones futuras de Microsoft.Data.Sqlite. |
En el ejemplo siguiente se muestra cómo usar GetSchemaTable para crear una cadena de depuración que muestre metadatos sobre un 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 ejemplo, esta consulta produciría la siguiente cadena de depuración:
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
Metadatos de esquema
Microsoft.Data.Sqlite no implementa el método GetSchema en DbConnection. En su lugar, puede consultar directamente la información de esquema mediante la tabla sqlite_master y las instrucciones PRAGMA, como table_info y foreign_key_list.
Por ejemplo, esta consulta recuperará metadatos sobre todas las columnas de la base de datos.
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';