Partilhar via


Obtendo metadados com conjuntos de linhas de esquema

Às vezes você precisa obter informações sobre o provedor, o conjunto de linhas, a tabela, colunas, ou outras informações de base de dados sem abrir o conjunto de linhas. Os dados sobre a estrutura do base de dados são chamados de metadados e podem ser recuperados por vários métodos diferentes. Um método é usar conjuntos de linhas de esquema.

Os modelos OLE DB oferecem um conjunto de classes para recuperar informações de esquema; essas classes criam conjuntos de linhas de esquema predefinidos e são listadas em Classes do conjunto de linhas de esquema e classes de Typedef.

Dica

Se você estiver usando OLAP e alguns de seus conjuntos de linhas não são suportados pela classes do conjunto de linhas de esquema (por exemplo, você tem um número de colunas variável), você deve considerar o uso CManualAccessor ou CDynamicAccessor.Você pode rolar pelas colunas e usar instruções de casos para tratar os possíveis tipos de dados para cada coluna.

Modelo do catálogo/esquema

ANSI SQL define um modelo do catálogo/esquema para repositórios de dados; O OLE DB usa esse modelo. Neste modelo, os catálogos (bases de dados) contêm esquemas e esquemas contêm tabelas.

  • O catálogo deCatálogoA é outro nome de um base de dados. É uma coleção de esquemas relacionados. Para listar os catálogos (bases de dados) que pertencem a uma determinada fonte de dados, use CCatalog. Porque muitos bases de dados têm apenas um catálogo, os metadados são as vezes chamado simplesmente informações de esquema.

  • O esquema de ASchemaé uma coleção de objetos da base de dados de propriedade ou foram criadas por um usuário específico. Para listar os esquemas de propriedade de um determinado usuário, use CSchemata.

    No Microsoft SQL Server e em termos de ODBC 2.x, um esquema é um proprietário (por exemplo, dbo é um nome de esquema comum). Além disso, o SQL Server armazena metadados em um conjunto de tabelas: uma tabela contém uma lista de todas as tabelas e outra tabela contém uma lista de todas as colunas. Não há nenhum equivalente a um esquema em uma base de dados do Microsoft Access.

  • As tabelas deTabelasão coleções de colunas organizados em pedidos específicos. Para listar as tabelas definidas em um catálogo específico (base de dados) e informações sobre essas tabelas, use CTables).

Restrições

Quando você consulta a informações de esquema, você pode usar restrições para especificar o tipo de informações no qual você está interessado. Você pode pensar restrições como um filtro ou um qualificador em uma consulta. Por exemplo, a consulta:

SELECT * FROM authors where l_name = 'pivo'

l_name é uma restrição. Este é um exemplo simples com apenas uma limitação; as classes do conjunto de linhas de esquema oferecem suporte a várias restrições.

classes do typedef do conjunto de linhas de esquema encapsula todos os conjuntos de linhas de esquema OLE DB para que você possa acessar um conjunto de linhas de esquema assim como qualquer outro conjunto de linhas criando uma instância e abrindo o. Por exemplo, a classe CColumns do typedef é definida como:

CRestrictions<CAccessor<CColumnsInfo>

A classe de CRestrictions fornece suporte de restrição. Depois que você criar uma instância do conjunto de linhas de esquema, chame CRestrictions::Open. Esse método retorna um conjunto de resultados baseado em restrições que você especifica.

Para especificar restrições, consulte Apêndice B: Conjuntos de linhas de esquema e pesquisar o conjunto de linhas que você está usando. Por exemplo, CColumns corresponde a Conjunto de linhas COLUMNS; esse tópico lista as colunas de restrição no conjunto de linhas COLUMNS: , TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME. Você deve seguir a ordem em que especificar suas restrições.

Assim, por exemplo, se você quiser restringir o nome da tabela, observe que TABLE_NAME é a terceira coluna de restrição, e para chamar em Abrir, especificando o nome desejado de tabela como o terceiro parâmetro de restrição, conforme mostrado no exemplo a seguir.

Para usar conjuntos de linhas de esquema

  1. Você deve incluir o arquivo de cabeçalho Atldbsch.h (logicamente, você precisa Atldbcli.h para suporte ao consumidor também).

  2. Crie uma instância de um objeto de conjunto de linhas de esquema no cliente ou no arquivo de cabeçalho do documento. Se você deseja informações da tabela, declarar um objeto de CTables ; se você deseja informações de coluna, declarar um objeto de CColumns . Este exemplo mostra como recuperar as colunas na tabela de autores:

    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 buscar informações, o acesso ao membro de dados apropriado do objeto de conjunto de linhas de esquema, por exemplo, ColumnSchemaRowset.m_szColumnName. Isso corresponde a COLUMN_NAME. Para ver a que a coluna OLE DB cada membro de dados corresponde, consulte CColumns.

Para referência de conjunto de linhas de esquema, as classes do typedef fornecidos nos modelos OLE DB (consulte Classes do conjunto de linhas de esquema e classes de Typedef).

Para obter mais informações sobre conjuntos de linhas de esquema OLE DB, incluindo colunas de restrição, consulte Apêndice B: Conjuntos de linhas de esquema na referência do programador de OLE DB.

Para obter exemplos mais complexos como usar classes do conjunto de linhas de esquema, consulte os exemplos de CatDB e de DBViewer .

Para obter informações sobre o suporte do provedor para conjuntos de linhas de esquema, consulte Conjuntos de linhas de esquema de suporte.

Consulte também

Conceitos

Usando acessadores