Share via


OLE DBを使用した検索

ADSIは、ActiveX Data Objects (ADO) を使用するオートメーションクライアントと、すべての非オートメーションクライアントの両方に対して、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で取得したIDBInitializeインターフェイスに対して、IDBPropertiesインターフェイスのクエリを実行します。
  4. 手順2で作成した DBPROP配列を渡すIDBProperties::SetPropertiesメソッドを呼び出します。
  5. IDBInitialize::Initializeメソッドを呼び出して、OLE DBプロバイダーへの接続を確立します。この場合は、Active Directoryプロバイダーです。
  6. IDBInitializeインターフェイスに対してIDBCreateSessionインターフェイスのクエリを実行します。
  7. IDBCreateCommand型の新しいインターフェイスを要求するIDBCreateSession::CreateSessionメソッドを呼び出します。
  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. IRowset::GetDataを呼び出し、手順16で返されたセットから行ハンドルを渡します。 行への生のポインターが返されます。

検索フィルター構文の詳細については、検索フィルター構文を参照してください。

返された未処理の行データを読み取るには、手順13で作成したDBBINDING構造体を使用して、手順17で返された未処理のデータポインターの列オフセットを計算します。 列の状態部分を読み取って、その列の取得結果を確認します。

ADSI OLE DBプロバイダーを使用してActive Directoryを検索する方法を示すコード例の詳細については、 OLE DBを使用してActive Directoryを検索するコード例を参照してください。