Поделиться через


Поиск с помощью OLE DB

Для клиентов службы автоматизации с помощью объектов данных ActiveX (ADO) и всех клиентов, отличных от автоматизации, ADSI предоставляет поставщик OLE DB, поддерживающий подмножество интерфейсов запросов OLE DB. Клиентский код, который уже использует интерфейсы OLE DB для запросов, может использовать те же интерфейсы для запроса служб каталогов.

В реализации OLE DB служба каталогов предоставляется как объект источника данных. Объекты источника данных — это фабрики для объектов сеанса и поддержка IDBInitialize для подключения к каталогу, IDBCreateSession для создания объекта сеанса, IDBProperties для предоставления данных проверки подлинности базовому пространству имен и предоставления команды запроса и IPersist для сохранения данных, необходимых для создания объекта источника данных в базовой службе каталогов.

Выполнение запроса Active Directory с помощью OLE DB

  1. Получите интерфейс IDBInitialize из поставщика OLE DB. В случае Active Directory используйте идентификатор класса CLSID_ADsDSOObject.
  2. Создайте массив данных подключения DBPROP с указанием имени пользователя и пароля.
  3. Запросите интерфейс IDBInitialize, полученный на шаге 1 для интерфейса IDBProperties.
  4. Вызовите метод IDBProperties::SetProperties, передав массив DBPROP, созданный на шаге 2.
  5. Вызовите метод IDBInitialize::Initialize, чтобы установить подключение к поставщику OLE DB; это поставщик Active Directory, в данном случае.
  6. Запросите интерфейс IDBInitialize для интерфейса IDBCreateSession.
  7. Вызовите метод IDBCreateSession::CreateSession, запрашивающий новый интерфейс типа IDBCreateCommand.
  8. Вызовите метод IDBCreateCommand::CreateCommand, чтобы создать интерфейс ICommandText.
  9. Вызовите метод ICommandText::SetCommandText. Передайте предпочтительный диалект и фактический текст команды запроса в этом диалекте. В качестве диалекта можно использовать либо DBGUID_LDAPDialect, либо DBGUID_DBSQL.
  10. Вызов ICommand::Execute; возвращается интерфейс IRowset , который является интерфейсом результирующий набор.
  11. Запросите интерфейс IRowset для интерфейса IColumnsInfo.
  12. Вызовите метод IColumnsInfo::GetColumnInfo, чтобы получить данные столбцов о результирующем наборе.
  13. Заполните массив структур DBBINDING , описывающий поставщик OLE DB DB, как предоставлять типы данных на основе каждого столбца коду приложения. Этот шаг позволяет указать, какой ТИП содержится в определенном столбце. Кроме того, смещения столбцов относительно возвращаемой строки задаются здесь на основе столбцов по столбцам.
  14. Запросите интерфейс IRowset для интерфейса IAccessor.
  15. Вызовите метод IAccessor::CreateAccessor, который возвращает массив дескрипторов доступа. Затем этот массив используется для доступа к строкам результирующий набор.
  16. Вызовите IRowset::GetNextRows , передавая дескриптора строк, и количество строк для получения.
  17. Вызов IRowset ::GetData , передавающий дескриптор строки, из набора, возвращенного на шаге 16. Возвращается необработанный указатель на строку.

Дополнительные сведения о синтаксисе фильтра поиска см. в разделе "Синтаксис фильтра поиска".

Чтобы прочитать возвращенные необработанные данные строки, используйте структуру DBBINDING , созданную на шаге 13, вычислить смещение столбца в указателе непроцессированных данных, возвращенном на шаге 17. Прочитайте часть состояния столбца для результата извлечения в этом столбце.

Дополнительные сведения и пример кода, демонстрирующий поиск Active Directory с помощью поставщика OLE DB ADSI, см. в разделе "Пример кода для использования OLE DB для поиска Active Directory".