Pesquisando com OLE DB
Para clientes de automação que usam ActiveX Data Objects (ADO) e todos os clientes que não são de automação, o ADSI fornece um provedor OLE DB que oferece suporte a um subconjunto de interfaces de consulta OLE DB. O código do cliente que já usa interfaces OLE DB para consultas pode usar as mesmas interfaces para consultar serviços de diretório.
Na implementação OLE DB, um serviço de diretório é exposto como um objeto de fonte de dados. Os objetos de Fonte de Dados são fábricas para objetos de sessão e oferecem suporte a IDBInitialize para se conectar ao diretório, IDBCreateSession para criar o objeto de sessão, IDBProperties para fornecer dados de autenticação ao namespace subjacente e fornecer o comando query e IPersist para salvar os dados necessários para criar o objeto de fonte de dados no serviço de diretório subjacente.
Para executar uma consulta do Active Directory usando OLE DB
- Recupere a interface IDBInitialize do provedor OLE DB. No caso do Active Directory, use o identificador de classe CLSID_ADsDSOObject.
- Crie uma matriz DBPROP de dados de conexão especificando nome de usuário e senha.
- Consulte a interface IDBInitialize recuperada na Etapa 1 para a interface IDBProperties.
- Chame o método IDBProperties::SetProperties passando na matriz DBPROP criada na Etapa 2.
- Chame o método IDBInitialize::Initialize para estabelecer a conexão com o provedor OLE DB, que é o provedor do Active Directory, nesse caso.
- Consulte a interface IDBInitialize para a interface IDBCreateSession.
- Chame o método IDBCreateSession::CreateSession solicitando uma nova interface do tipo IDBCreateCommand.
- Chame o método IDBCreateCommand::CreateCommand para criar uma interface ICommandText .
- Chame o método ICommandText::SetCommandText . Passe o dialeto preferido e o texto do comando de consulta real nesse dialeto. Tanto DBGUID_LDAPDialect quanto DBGUID_DBSQL podem ser usados como dialeto.
- Chame ICommand::Execute; uma interface IRowset é retornada, que é a interface para o conjunto de resultados.
- Consulte a interface IRowset para a interface IColumnsInfo.
- Chame o método IColumnsInfo::GetColumnInfo para recuperar dados de coluna sobre o conjunto de resultados.
- Preencha uma matriz de estruturas DBBINDING, descrevendo ao provedor OLE DB como expor os tipos de dados por coluna ao código do aplicativo. Esta etapa permite especificar qual TYPE está contido em uma coluna específica. Além disso, os deslocamentos das colunas, relativos à linha retornada, são definidos aqui coluna por coluna.
- Consulte a interface IRowset para a interface IAccessor.
- Chame o método IAccessor::CreateAccessor , que retorna uma matriz de identificadores de acessador. Essa matriz é usada para acessar as linhas do conjunto de resultados.
- Chame IRowset::GetNextRows passando as alças de linha e o número de linhas a serem obtidas .
- Chame IRowset::GetData passando em um identificador de linha, a partir do conjunto retornado na Etapa 16. Um ponteiro bruto para a linha é retornado.
Para obter mais informações sobre a sintaxe do filtro de pesquisa, consulte Sintaxe do filtro de pesquisa.
Para ler os dados de linha não processados retornados, use a estrutura DBBINDING , criada na Etapa 13, calcule os deslocamentos de coluna no ponteiro de dados não processados retornado na Etapa 17. Leia a parte de status da coluna para obter um resultado de recuperação nessa coluna.
Para obter mais informações e um exemplo de código que mostra como pesquisar o Active Directory usando o provedor ADSI OLE DB, consulte Código de exemplo para usar OLE DB para pesquisar o Active Directory.