Obtenção de metadados com conjuntos de linhas do esquema
Às vezes você precisa obter informações sobre o provedor, conjunto de linhas, tabela, colunas ou outras informações de banco de dados sem abrir o conjunto de linhas.Dados sobre a estrutura de banco de dados são chamados de metadados e podem ser recuperados por um número de métodos diferentes.Um método é usar conjuntos de linhas do esquema.
OLE DB modelos fornecem um conjunto de classes para recuperar informações de esquema; Essas classes criar conjuntos de linhas do esquema predefinido e estão listados na Classes de conjunto de linhas de esquema e Typedef.
Observação |
---|
Se você estiver usando o OLAP e alguns de seus conjuntos de linhas não são suportados pelas classes de conjunto de linhas do esquema (por exemplo, se você tiver um número variável de colunas), você deve considerar usar CManualAccessor ou CDynamicAccessor.Você pode percorrer as colunas e usar instruções case para lidar com os tipos de dados possíveis para cada coluna. |
Modelo de esquema do catálogo
SQL ANSI define um modelo de esquema do catálogo para armazenamentos de dados; OLE DB usa esse modelo.Nesse modelo, catálogos (bancos de dados) contêm esquemas e os esquemas contêm tabelas.
Catálogo um catálogo é outro nome para um banco de dados.É uma coleção de esquemas relacionadas.Para listar os catálogos (bancos de dados) que pertencem a uma determinada fonte de dados, use CCatalog.Como muitos bancos de dados têm apenas um catálogo, metadados é chamado às vezes simplesmente informações de esquema.
Esquema um esquema é uma coleção de objetos de banco de dados que são de propriedade ou ter sido criado por um usuário específico.Para listar os esquemas de um determinado usuário, use CSchemata.
Em termos de Microsoft SQL Server e ODBC 2. x, um esquema é um proprietário (por exemplo, dbo é um nome de esquema típico).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 para um esquema em um banco de dados do Microsoft Access.
Tabela tabelas são conjuntos de colunas organizadas em ordens específicas.Para listar tabelas definidas em um determinado catálogo (banco de dados) e informações sobre essas tabelas, use CTables).
Restrições
Quando você consulta informações de esquema, você pode usar restrições para especificar o tipo de informação que você está interessado.Você pode pensar em restrições como qualificador de uma consulta ou filtro.Por exemplo, na consulta:
SELECT * FROM authors where l_name = 'pivo'
l_nameé uma restrição.Este é um exemplo muito simples com apenas uma restrição; classes de conjunto de linhas esquema suportam a várias restrições.
O classes de typedef de conjunto de linhas de esquema encapsular todos os conjuntos de esquema de OLE DB para que possa acessar um conjunto de linhas do esquema assim como qualquer outro conjunto de linhas instanciando e abri-lo.Por exemplo, a classe de typedef CColumns é definido como:
CRestrictions<CAccessor<CColumnsInfo>
O CRestrictions classe fornece o suporte de restrição.Depois de criar uma instância do conjunto de linhas do esquema, chamada CRestrictions::Open.Esse método retorna um conjunto de resultados com base nas restrições que você especificar.
Para especificar as restrições, consulte Apêndice b: esquema Rowsets e consultar o conjunto de linhas que você está usando.Por exemplo, CColumns corresponde do o conjunto de linhas de colunas; Esse tópico lista as colunas de restrição no conjunto de linhas colunas: TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, nome da coluna.Você deve seguir a ordem de especificar as restrições.
Assim, por exemplo, se você quiser restringir o nome da tabela, observe que TABLE_NAME é a terceira coluna de restrição e, em seguida, chamar Abrir, especificando o nome da tabela desejada como terceiro parâmetro de restrição, conforme mostrado no exemplo a seguir.
Usar conjuntos de linhas do esquema
Você deve incluir o arquivo de cabeçalho Atldbsch.h (Obviamente, você precisa Atldbcli.h para suporte ao consumidor também).
Instanciar um objeto de conjunto de linhas do esquema do consumidor ou o documento arquivo de cabeçalho.Se você deseja informações da tabela, declare um CTables de objeto; Se você deseja informações de coluna, declare um CColumns objeto.Este exemplo mostra como recuperar as colunas na tabela 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(); }
Para buscar as informações, acessar o membro de dados apropriado do objeto de conjunto de linhas esquema, por exemplo, ColumnSchemaRowset.m_szColumnName.Isso corresponde ao nome da coluna.Para ver a coluna de OLE DB que cada membro de dados corresponde ao, consulte CColumns.
Para a referência do conjunto de linhas do esquema, classes typedef fornecido nos modelos OLE DB (consulte Classes de conjunto de linhas de esquema e Typedef).
Para obter mais informações sobre conjuntos de linhas de esquema de OLE DB, incluindo colunas de restrição, consulte Apêndice b: esquema Rowsets na referência o OLE DB Programmer.
Para mais complexos exemplos de como usar classes de conjunto de linhas do esquema, consulte o CatDB e DBViewer samples.
Para obter informações sobre o suporte do provedor para conjuntos de linhas do esquema, consulte Suporte a conjuntos de linhas de esquema.