OLE DBを使用した検索
ADSIは、ActiveX Data Objects (ADO) を使用するオートメーションクライアントと、すべての非オートメーションクライアントの両方に対して、OLE DBクエリインターフェイスのサブセットをサポートするOLE DBプロバイダーを提供します。 クエリにOLE DBインターフェイスを既に使用しているクライアントコードでは、同じインターフェイスを使用してディレクトリサービスのクエリを実行できます。
OLE DB実装では、ディレクトリサービスはデータソースオブジェクトとして公開されます。 データソースオブジェクトはセッションオブジェクトのファクトリであり、ディレクトリに接続するための IDBInitialize、セッションオブジェクトを作成するためのIDBCreateSession、基になる名前空間に認証データを提供するためのIDBProperties、および基になるディレクトリサービスにデータソースオブジェクトを作成するために必要なデータを保存するためのクエリコマンドとIPersistをサポートします。
OLE DBを使用してActive Directoryクエリを実行するには
- OLE DBプロバイダーからIDBInitialize インターフェイスを取得します。 Active Directoryの場合は、クラス識別子CLSID_ADsDSOObjectを使用します。
- ユーザー名とパスワードを指定して、接続データの DBPROP 配列を作成します。
- 手順1で取得したIDBInitializeインターフェイスに対して、IDBPropertiesインターフェイスのクエリを実行します。
- 手順2で作成した DBPROP配列を渡すIDBProperties::SetPropertiesメソッドを呼び出します。
- IDBInitialize::Initializeメソッドを呼び出して、OLE DBプロバイダーへの接続を確立します。この場合は、Active Directoryプロバイダーです。
- IDBInitializeインターフェイスに対してIDBCreateSessionインターフェイスのクエリを実行します。
- IDBCreateCommand型の新しいインターフェイスを要求するIDBCreateSession::CreateSessionメソッドを呼び出します。
- IDBCreateCommand::CreateCommandメソッドを呼び出して、ICommandTextインターフェイスを作成します。
- ICommandText::SetCommandText メソッドを呼び出します。 優先する言語と、その言語の実際のクエリコマンドテキストを渡します。 DBGUID_LDAPDialectまたはDBGUID_DBSQLのいずれかを言語として使用できます。
- ICommand::Executeを呼び出します。結果セットへのインターフェイスであるIRowsetインターフェイスが返されます。
- IColumnsInfoインターフェイスのIRowsetインターフェイスに対してクエリを実行します。
- IColumnsInfo::GetColumnInfoメソッドを呼び出して、結果セットに関する列データを取得します。
- DBBINDING構造体の配列を設定し、列ごとにデータ型をアプリケーションコードに公開する方法をOLE DBプロバイダーに記述します。 この手順では、特定の列に含まれるTYPEを指定できます。 また、返される行を基準とした列のオフセットは、列ごとに設定されます。
- IAccessorインターフェイスの IRowsetインターフェイスに対してクエリを実行します。
- アクセサーハンドルの配列を返すIAccessor::CreateAccessorメソッドを呼び出します。 この配列は、結果セットの行にアクセスするために使用されます。
- IRowset::GetNextRowsを呼び出し、行ハンドルと取得する行数を渡します。
- IRowset::GetDataを呼び出し、手順16で返されたセットから行ハンドルを渡します。 行への生のポインターが返されます。
検索フィルター構文の詳細については、検索フィルター構文を参照してください。
返された未処理の行データを読み取るには、手順13で作成したDBBINDING構造体を使用して、手順17で返された未処理のデータポインターの列オフセットを計算します。 列の状態部分を読み取って、その列の取得結果を確認します。
ADSI OLE DBプロバイダーを使用してActive Directoryを検索する方法を示すコード例の詳細については、 OLE DBを使用してActive Directoryを検索するコード例を参照してください。