An important function of Active Directory® is to resolve data
queries for for people, as well as configuration data for computers
and services. To write efficient queries for Active Directory, it
is helpful to be familiar with the following:
Determining the scope of the query. Must the client find
properties for objects that might be located anywhere within a
forest, or only within one domain, or within a given organizational
unit (OU)?
Determining the depth of the query. Must the query only
search one level or might it cross into other LDAP
directories?
Performance and handling large result sets. How should
the client effectively handle the potential of a large result
set?
Determining the best queries. What type of queries
provide the most efficient results? What type of queries should the
developer avoid?
Understanding the query syntax. ADSI supports both the
LDAP syntax as documented in RFC 2254, as well as a subset of
SQL.
Choice of interfaces. ADSI provides both OLE DB support
as well as a C/C++ interface called IDirectorySearch. Because ADSI
works for multiple namespaces, you can use these interfaces for
querying other namespaces such as NDS and Exchange, as well as
Active Directory. Namespaces such as those supported in Windows NT®
(WinNT://), prior to Windows® 2000 and NetWare 3, do not support
these interfaces, because the underlying infrastructure does not
support rich query. Because the ActiveX® Data Object (ADO) is a
simple scriptable data access object model on top of OLE DB, the
OLE DB interfaces work well for Visual Basic programmers and Web
page script writers. The new data access features within Visual
Studio 6 and Office applications that take advantage of ADO and OLE
DB can now access Active Directory data in the same way that they
access data from other OLE DB providers, such as SQL Server.
However, if a C/C++ developer must perform a simple directory
search, the IDirectorySearch interface might be more
appropriate than the OLE DB interfaces.
The following topics describe how to search Active Directory to
ensure your application issues the most efficient query, given the
requirements of the client: