Compartir a través de


Metadatos (Sqlite)

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';

Consulte también