Compartir a través de


Obtener metadatos con conjuntos de filas de esquema

En ciertas ocasiones necesitará obtener información sobre un proveedor, un conjunto de filas, una tabla, ciertas columnas u otros datos relacionados con la base de datos sin abrir el conjunto de filas. Los datos sobre la estructura de la base de datos se denominan metadatos y se pueden recuperar con métodos diversos. Uno de ellos consiste en usar conjuntos de filas de esquema.

Las plantillas OLE DB proporcionan un conjunto de clases para recuperar información de esquema, que crean conjuntos de filas de esquema predefinidos. Se enumeran en Clases de conjunto de filas de esquema y clases typedef.

Nota:

Si usa OLAP y hay conjuntos de filas no compatibles con las clases de conjunto de filas de esquema (por ejemplo, si tiene un número variable de columnas), considere la posibilidad de usar CManualAccessor o CDynamicAccessor. Puede desplazarse por las columnas y usar instrucciones case para controlar los posibles tipos de datos de cada columna.

Modelo de esquema y catálogo

ANSI SQL define un modelo de esquema y catálogo para almacenes de datos. OLE DB usa este modelo. En él, los catálogos (bases de datos) contienen esquemas, y estos contienen tablas.

  • Catálogo Es otro término para designar a una base de datos. Consiste en una colección de esquemas relacionados. Puede mostrar los catálogos (bases de datos) pertenecientes a un origen de datos determinado con CCatalog. Dado que muchas bases de datos solo tienen un catálogo, a los metadatos a veces se les denomina información de esquema.

  • Esquema Una colección de objetos de base de datos que ha creado un usuario determinado o le pertenecen. Puede mostrar los esquemas que pertenecen a un usuario determinado con CSchemata.

    En los términos de Microsoft SQL Server y ODBC 2.x, un esquema es propietario (por ejemplo, dbo es un nombre de esquema típico). Además, SQL Server almacena metadatos en un conjunto de tablas: una tabla contiene una lista de todas las tablas y otra tabla contiene una lista de todas las columnas. No existe equivalente al esquema en las bases de datos de Microsoft Access.

  • Tabla Las tablas son colecciones de columnas dispuestas en un orden específico. Puede obtener una lista de las tablas definidas en un catálogo (base de datos) determinado e información sobre estas con CTables.

Restricciones

Cuando consulte la información de esquema, puede especificar el tipo de información que le interesa a través de las restricciones. Considere las restricciones como un filtro o un calificador de una consulta. Por ejemplo, observe la consulta siguiente:

SELECT * FROM authors WHERE l_name = 'pivo'

l_name es una restricción. Este es un ejemplo sencillo, con una sola restricción. Las clases de conjunto de filas de esquema son compatibles con varias restricciones.

Las clases de definiciones de tipo de conjunto de filas de esquema encapsulan todos los conjuntos de filas de esquema OLE DB. Para acceder a un conjunto de filas de esquema, al igual que lo haría con cualquier otro conjunto de filas, cree la instancia correspondiente y ábralo. Por ejemplo, la clase de definiciones de tipo CColumns se determina de la siguiente forma:

CRestrictions<CAccessor<CColumnsInfo>

La clase CRestrictions ofrece la compatibilidad con las restricciones. Después de crear una instancia del conjunto de filas de esquema, llame a CRestrictions::Open. Este método devuelve un conjunto de resultados basado en las restricciones especificadas.

Para especificar restricciones, consulte el apéndice B sobre los conjuntos de filas de esquema y busque el conjunto de filas que está usando. Por ejemplo, CColumns se corresponde con este tema sobre el conjunto de filas COLUMNS, que enumera las columnas de restricción del conjunto de filas COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Debe seguir este orden al especificar las restricciones.

Por ejemplo, si desea restringir por nombre de tabla, TABLE_NAME es la tercera columna de restricción. A continuación, llame a Open y especifique el nombre de tabla que desea como tercer parámetro de restricción, tal como se muestra en el ejemplo siguiente.

Para usar los conjuntos de filas de esquema:

  1. Incluya el archivo de encabezado Atldbsch.h (también necesita Atldbcli.h para soporte para consumidores).

  2. Cree una instancia de un objeto de conjunto de filas de esquema en el archivo de encabezado del documento o del consumidor. Si está interesado en la información de tabla, declare un objeto CTables. Si prefiere la información de columna, declare un objeto CColumns en su lugar. Este ejemplo muestra cómo recuperar las columnas de la tabla authors:

    CDataSource ds;
    ds.Open();
    CSession ss;
    ss.Open(ds);
    CColumns columnSchemaRowset;
    // TABLE_NAME is the third restriction column, so
    // specify "authors" as the third restriction parameter:
    HRESULT hr = columnSchemaRowset.Open(ss, NULL, NULL, L"authors");
    hr = columnSchemaRowset.MoveFirst();
    while (hr == S_OK)
    {
       hr = columnSchemaRowset.MoveNext();
    }
    
  3. Para capturar la información, acceda al miembro de datos correspondiente al objeto de conjunto de filas de esquema (por ejemplo, ColumnSchemaRowset.m_szColumnName). Este miembro de datos corresponde a COLUMN_NAME. Para ver qué columna OLE DB corresponde a cada miembro de datos, consulte CColumns.

Para obtener la referencia del conjunto de filas de esquema, se proporcionan clases de definiciones de tipo en las plantillas OLE DB (consulte Clases de conjunto de filas de esquema y clases typedef).

Para obtener más información sobre los conjuntos de filas de esquema OLE DB, incluidas las columnas de restricción, consulte el apéndice B sobre los conjuntos de filas de esquema en la Referencia del programador de OLE DB.

Para obtener ejemplos más complejos de cómo usar las clases de conjunto de filas de esquema, consulte los ejemplos de CatDB y DBViewer.

Para obtener más información sobre la compatibilidad del proveedor con los conjuntos de filas de esquema, consulte Admitir conjuntos de filas de esquema.

Consulte también

Usar descriptores de acceso