使用 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. 呼叫傳入步驟 2 中建立之 DBPROP 陣列的 IDBProperties::SetProperties 方法。
  5. 呼叫IDBInitialize::Initialize方法,以建立與 OLE DB 提供者的連線;在此案例中為Active Directory 提供者。
  6. 查詢 IDBCreateSession 介面的 IDBInitialize 介面。
  7. 呼叫IDBCreateSession::CreateSession方法,要求IDBCreateCommand類型的新介面。
  8. 呼叫IDBCreateCommand::CreateCommand方法來建立 ICommandText 介面。
  9. 呼叫 ICommandText::SetCommandText 方法。 傳入慣用方言和該方言中的實際查詢命令文字。 DBGUID_LDAPDialect或DBGUID_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 的範例程式代碼。