Obtendo metadados com conjuntos de linhas de esquema
Às vezes, você precisa obter informações sobre o provedor, o conjunto de linhas, a tabela, as colunas ou outras informações do banco de dados sem abrir o conjunto de linhas. Os dados sobre a estrutura do banco 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 fornecem um conjunto de classes para recuperar informações de esquema; essas classes criam conjuntos de linhas de esquema predefinidos e estão listadas em Classes de Conjunto de Linhas de Esquema e Classes Typedef.
Observação
Se você estiver usando o OLAP e alguns de seus conjuntos de linhas não tiverem suporte nas classes de conjunto de linhas de esquema (por exemplo, você tem um número variável de colunas), considere usar CManualAccessor
ou CDynamicAccessor
. Você pode rolar pelas colunas e usar instruções Case para lidar com os possíveis tipos de dados para cada coluna.
Modelo de catálogo/esquema
O ANSI SQL define um modelo de catálogo/esquema para armazenamentos de dados; o OLE DB usa esse modelo. Nesse modelo, catálogos (bancos de dados) têm esquemas e esquemas têm tabelas.
Catálogo Um catálogo é outro nome para um banco de dados. É uma coleção de esquemas relacionados. Para listar os catálogos (bancos de dados) pertencentes a uma determinada fonte de dados, use CCatalog. Como muitos bancos de dados têm apenas um catálogo, os metadados às vezes são chamados de informações de esquema.
Esquema Um esquema é uma coleção de objetos de banco de dados que pertencem ou que foram criados por um usuário específico. Para listar os esquemas pertencentes a um determinado usuário, use CSchemata.
Nos termos do Microsoft SQL Server e ODBC 2.x, um esquema é um proprietário (por exemplo, dbo é um típico nome de esquema). 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á equivalente a um esquema em um banco de dados do Microsoft Access.
Tabela As tabelas são coleções de colunas organizadas em ordens específicas. Para listar as tabelas definidas em um determinado catálogo (banco de dados) e informações sobre essas tabelas, use CTables.
Restrições
Ao consultar informações de esquema, você pode usar restrições para especificar o tipo de informação em que está interessado. Você pode pensar em restrições como um filtro ou qualificador em uma consulta. Por exemplo, na consulta:
SELECT * FROM authors WHERE l_name = 'pivo'
l_name
é uma restrição. Este é um exemplo simples com apenas uma restrição; as classes de conjunto de linhas de esquema dão suporte a várias restrições.
As classes typedef do conjunto de linhas de esquema encapsulam todos os conjuntos de linhas de esquema OLE DB para que você possa acessar um conjunto de linhas de esquema como qualquer outro instanciando-o e abrindo-o. Por exemplo, a classe typedef CColumns é definida como:
CRestrictions<CAccessor<CColumnsInfo>
A classe CRestrictions fornece o suporte à restrição. Depois de criar uma instância do conjunto de linhas de esquema, chame CRestrictions::Open. Esse método retorna um conjunto de resultados com base nas restrições que você especificar.
Para especificar restrições, consulte Apêndice B: Conjuntos de linhas de esquema e pesquise o conjunto de linhas que você está usando. Por exemplo, CColumns
corresponde ao 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 essa ordem para especificar suas restrições.
Portanto, por exemplo, se você quiser restringir pelo nome da tabela, TABLE_NAME é a terceira coluna de restrição e, em seguida, chame Open
, especificando o nome da tabela desejada como o terceiro parâmetro de restrição, conforme mostrado no exemplo a seguir.
Para usar conjuntos de linhas de esquema
Inclua o arquivo de cabeçalho
Atldbsch.h
(você também precisa deAtldbcli.h
para suporte ao consumidor).Instancie um objeto de conjunto de linhas de esquema no arquivo de cabeçalho do consumidor ou do documento. Se você quiser informações de tabela, declare um objeto
CTables
; se desejar informações de coluna, declare um objetoCColumns
. Este exemplo mostra como recuperar as colunas na tabela de autores: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(); }
Para buscar as informações, acesse o membro de dados apropriado do objeto de conjunto de linhas de esquema, por exemplo,
ColumnSchemaRowset.m_szColumnName
. Esse membro de dados corresponde a COLUMN_NAME. Para ver a coluna OLE DB à qual cada membro de dados corresponde, consulte CColumns.
Para a referência do conjunto de linhas de esquema, classes typedef fornecidas nos modelos OLE DB (consulte Classes de conjunto de linhas de esquema e classes 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 OLE DB.
Para obter exemplos mais complexos de como usar classes de conjunto de linhas de esquema, consulte os exemplos de CatDB e DBViewer.
Para obter informações sobre o suporte do provedor para conjuntos de linhas de esquema, consulte Suporte a conjuntos de linhas de esquema.