Compartir a través de


Obtener metadatos con conjuntos de filas de esquema

A veces es necesario obtener información sobre el proveedor, conjunto de filas, tabla, columnas u otra información de bases de datos sin abrir el conjunto de filas. Los datos acerca de la estructura de base de datos se denominan metadatos y se pueden recuperar mediante métodos distintos. Uno de los métodos es usar conjuntos de filas de esquema.

Las plantillas OLE DB proporcionan un conjunto de clases para recuperar información de esquema; estas clases crean conjuntos de filas de esquema predefinidos y se enumeran en Clases de conjuntos de filas y de definiciones de tipos de esquema.

Nota

Si utiliza OLAP y parte de los conjuntos de filas no son compatibles con las clases de conjunto de filas de esquema (por ejemplo, si tiene un número variable de columnas), debe considerar el uso de CManualAccessor o CDynamicAccessor. Es posible desplazarse por las columnas y usar instrucciones case para controlar los posibles tipos de datos de cada columna.

Modelo de catálogo/esquema

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

  • Catálogo   Un catálogo es otra forma de denominar una base de datos. Es una colección de esquemas relacionados. Para mostrar los catálogos (bases de datos) pertenecientes a un origen de datos dado, use CCatalog. Puesto que muchas bases de datos sólo tienen un catálogo, los metadatos a veces se denominan información de esquema.

  • Esquema   Un esquema es una colección de objetos de base de datos de los que es propietario o autor un usuario particular. Para ver una lista de los esquemas que son propiedad de un usuario determinado, utilice CSchemata.

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

  • Tabla   Las tablas son colecciones de columnas dispuestas en un orden específico. Para ver la lista de las tablas definidas en un determinado catálogo (base de datos), e información sobre ellas, utilice CTables.

Restricciones

Al consultar información de esquema se pueden usar restricciones que especifiquen el tipo de información que nos interesa. Puede pensar en las restricciones como un filtro o un calificador en una consulta. Por ejemplo, en la consulta:

SELECT * FROM authors where l_name = 'pivo'

l_name es una restricción. Éste es un ejemplo muy sencillo con sólo una restricción; las clases de conjunto de filas de esquema admiten varias restricciones.

Las clases de definiciones de tipos de conjuntos de filas de esquema encapsulan todos los conjuntos de filas de esquema OLE DB, de forma que se pueda tener acceso a un conjunto de filas de esquema como a cualquier otro conjunto de filas creando una instancia y abriéndolo. Por ejemplo, la clase de definiciones de tipos CColumns se define como:

CRestrictions<CAccessor<CColumnsInfo>

La clase CRestrictions proporciona la compatibilidad con 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 que especifique.

Para especificar restricciones, vea el conjunto de filas que le interesa en el Apéndice B: conjuntos de filas de esquema. Por ejemplo, CColumns corresponde al Conjunto de filas COLUMNS; en ese tema, se enumeran las columnas de restricción en el conjunto de filas COLUMNS: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME y COLUMN_NAME. Deberá seguir este orden al especificar las restricciones.

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

Para usar conjuntos de filas de esquema

  1. Se debe incluir el archivo de encabezado Atldbsch.h (evidentemente, necesita Atldbcli.h para admitir consumidores).

  2. Cree una instancia de un conjunto de filas de esquema en el archivo de encabezado del consumidor o del documento. Si desea información acerca de las tablas, declare un objeto CTables; para obtener información de columnas, declare un objeto CColumns. Este ejemplo muestra cómo recuperar las columnas de la tabla authors:

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

Para consultar la referencia de las clases de definiciones de tipos de conjuntos de filas de esquema que proporcionan las plantillas OLE DB, vea Clases de conjuntos de filas y de definiciones de tipos de esquema.

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

Si desea obtener ejemplos más complejos sobre el uso de las clases de conjuntos de filas de esquema, vea los ejemplos CatDB y DBViewer.

Para obtener información acerca de la compatibilidad de los proveedores con los conjuntos de filas de esquema, vea Admitir conjuntos de filas de esquema.

Vea también

Conceptos

Utilizar descriptores de acceso