使用 OLE DB 搜尋

對於使用 ActiveX Data Objects (ADO) 和非自動化用戶端的自動化用戶端,ADSI 會提供支援 OLE DB 查詢介面子集的 OLE DB 提供者。 已經針對查詢使用 OLE DB 介面的用戶端程式代碼,可以使用相同的介面來查詢目錄服務。

在 OLE DB 實作下,目錄服務會公開為數據源物件。 資料來源物件是會話物件的處理站,並支援 IDBInitialize 連線到目錄、 IDBCreateSession 來建立會話物件、 IDBProperties 以將驗證資料提供給基礎命名空間,並提供查詢命令和 IPersist 來儲存建立資料來源物件至基礎目錄服務所需的資料。

使用 OLE DB 執行 Active Directory 查詢

  1. 從 OLE DB 提供者擷取 IDBInitialize 介面。 在 Active Directory 的情況下,請使用類別識別碼 CLSID_ADsDSOObject
  2. 建置指定使用者名稱和密碼之連線資料的 DBPROP 陣列。
  3. 查詢步驟 1 中針對IDBProperties介面擷取的IDBInitialize介面。
  4. 呼叫 IDBProperties::SetProperties 方法,傳入步驟 2 中建立 的 DBPROP 陣列。
  5. 呼叫 IDBInitialize::Initialize 方法,以建立與 OLE DB 提供者的連線;這是 Active Directory 提供者,在此案例中為 。
  6. 查詢IDBCreateSession介面的IDBInitialize介面。
  7. 呼叫 IDBCreateSession::CreateSession 方法,要求 IDBCreateCommand類型的新介面。
  8. 呼叫 IDBCreateCommand::CreateCommand 方法來建立 ICommandText 介面。
  9. 呼叫 ICommandText::SetCommandText 方法。 傳入慣用的方言和該方言中的實際查詢命令文字。 DBGUID_LDAPDialectDBGUID_DBSQL可用來做為方言。
  10. 呼叫 ICommand::Execute; 傳回 IRowset 介面,這是結果集的介面。
  11. 查詢IColumnsInfo介面的IRowset介面。
  12. 呼叫 IColumnsInfo::GetColumnInfo 方法,以擷取有關結果集的資料行資料。
  13. 填入 DBBINDING 結構的陣列,描述 OLE DB 提供者如何根據每個資料行向應用程式程式碼公開資料類型。 此步驟可讓您指定特定資料行中包含的 TYPE。 此外,相對於傳回的資料列,資料行的位移也會依資料行來設定。
  14. 查詢IAccessor介面的IRowset介面。
  15. 呼叫 IAccessor::CreateAccessor 方法,這個方法會傳回存取子控制碼的陣列。 然後,此陣列會用來存取結果集的資料列。
  16. 呼叫傳入資料列控制碼的 IRowset::GetNextRows ,以及要取得的資料列數目。
  17. 從步驟 16 中傳回的集合呼叫傳入資料列控制碼的 IRowset::GetData 。 會傳回資料列的原始指標。

如需搜尋篩選語法的詳細資訊,請參閱 搜尋篩選語法

若要讀取傳回的未處理資料列資料,請使用在步驟 13 中建立的 DBBINDING 結構,計算步驟 17 所傳回之未處理資料指標中的資料行位移。 讀取資料行的狀態部分,以取得該資料行上的擷取結果。

如需詳細資訊和示範如何使用 ADSI OLE DB 提供者搜尋 Active Directory 的程式碼範例,請參閱 使用 OLE DB 搜尋 Active Directory 的範例程式碼