Búsqueda con OLE DB
Para ambos clientes de Automation que usan Objetos de datos ActiveX (ADO) y todos los clientes que no son de Automatización, ADSI proporciona un proveedor OLE DB que admite un subconjunto de interfaces de consulta OLE DB. El código de cliente que ya usa interfaces OLE DB para consultas puede usar las mismas interfaces para consultar servicios de directorio.
En la implementación de OLE DB, un servicio de directorio se expone como un objeto de origen de datos. Los objetos de origen de datos son factorías para objetos de sesión y admiten IDBInitialize para conectarse al directorio, IDBCreateSession para crear el objeto de sesión, IDBProperties para proporcionar datos de autenticación al espacio de nombres subyacente y proporcionar el comando de consulta e IPersist para guardar los datos necesarios para crear el objeto de origen de datos en el servicio de directorio subyacente.
Para realizar una consulta de Active Directory mediante OLE DB
- Recupere la interfaz IDBInitialize del proveedor OLE DB. En el caso de Active Directory, use el identificador de clase CLSID_ADsDSOObject.
- Cree una matriz DBPROP de datos de conexión que especifiquen el nombre de usuario y la contraseña.
- Consulte la interfaz IDBInitialize recuperada en el paso 1 para la interfaz IDBProperties .
- Llame al método IDBProperties::SetProperties pasando la matriz DBPROP creada en el paso 2.
- Llame al método IDBInitialize::Initialize para establecer la conexión con el proveedor OLE DB; es el proveedor de Active Directory, en este caso.
- Consulte la interfaz IDBInitialize para la interfaz IDBCreateSession .
- Llame al método IDBCreateSession::CreateSession solicitando una nueva interfaz de tipo IDBCreateCommand.
- Llame al método IDBCreateCommand::CreateCommand para crear una interfaz ICommandText .
- Llame al método ICommandText::SetCommandText . Pase el dialecto preferido y el texto del comando de consulta real en ese dialecto. Se pueden usar DBGUID_LDAPDialect o DBGUID_DBSQL como dialecto.
- Llame a ICommand::Execute; Se devuelve una interfaz IRowset , que es la interfaz del conjunto de resultados.
- Consulte la interfaz IRowset para la interfaz IColumnsInfo .
- Llame al método IColumnsInfo::GetColumnInfo para recuperar datos de columna sobre el conjunto de resultados.
- Rellene una matriz de estructuras DBBINDING , que describe al proveedor OLE DB cómo exponer los tipos de datos por columna al código de la aplicación. Este paso le permite especificar qué TIPO está incluido en una columna determinada. También los desplazamientos de las columnas, en relación con la fila devuelta, se establecen aquí en una columna por columna.
- Consulte la interfaz IRowset para la interfaz IAccessor .
- Llame al método IAccessor::CreateAccessor , que devuelve una matriz de identificadores de descriptor de acceso. A continuación, esta matriz se usa para acceder a las filas del conjunto de resultados.
- Llame a IRowset::GetNextRows pasando los identificadores de fila y el número de filas que se van a obtener.
- Llame a IRowset::GetData pasando un identificador de fila desde el conjunto devuelto en el paso 16. Se devuelve un puntero sin procesar a la fila.
Para obtener más información sobre la sintaxis del filtro de búsqueda, vea Sintaxis de filtro de búsqueda.
Para leer los datos de fila no procesados devueltos, use la estructura DBBINDING , creada en el paso 13, calcula los desplazamientos de columna en el puntero de datos no procesado devuelto en el paso 17. Lea la parte de estado de la columna para obtener un resultado de recuperación en esa columna.
Para obtener más información y un ejemplo de código que muestra cómo buscar Active Directory mediante el proveedor OLE DB ADSI, vea Código de ejemplo para usar OLE DB para buscar Active Directory.