Universal Data Access is Microsoft's strategy for providing high-
performance access to all types of information (including relational and
non-relational data) across an organization from the desktop to enterprise
systems. It accomplishes this with the following four key technologies:
Recently, On-Line Analytical Processing, or multi-dimensional (OLAP)
extensions have been added to both OLE DB and ActiveX Data Objects (ADO).
Open Database Connectivity (ODBC), is an international standard for
manipulating relational data using SQL query syntax across disparate
datasources. ODBC has the advantage of being an international standard that
allows you to manipulate a vast array of relational datasources through
numerous ODBC Drivers from both Microsoft and third party vendors. The key
disadvantage of ODBC is that it is limited to relational, SQL-syntax based
OLE DB is Microsoft's strategic low-level interface to data across the
organization. OLE DB is an open specification designed to build on the
success of ODBC by providing an open standard for accessing all kinds of
data. OLE DB imposes no specific limitation on either the query syntax, or
the structure of the data exposed as long as it can be retrieved in tabular
form. An OLE DB Data Provider is analogous to an ODBC Driver, exposing a
DataSource to an OLE DB Consumer, such as ADO. An increasing variety of OLE
DB Data Providers are being released by both Microsoft and third party
vendors. The first OLE DB Data Provider, the Microsoft OLE DB Provider for
ODBC Drivers, enables you to expose any ODBC DataSource to an OLE DB
ADO is Microsoft's strategic, language-neutral, high-level interface to
data exposed by OLE DB. ADO provides consistent, high-performance access to
data, whether you are creating a front-end database client or middle-tier
business object using an application, tool, language, or even an Internet
browser. ADO is the single data interface you need to know for 1 to n-tier
client/server and Web-based data-driven solution development. ADO is the
definitive OLE DB Consumer, although you could write your consumer
application using C++ directly to a OLE DB provider.
The Microsoft Remote Data Service (RDS) allows you to use an ADO recordset
remotely across one of three protocols (HTTP, HTTPS, or DCOM). RDS was
originally intended for Web-based clients, but you are free to implement
your RDS client in any development environment or language you choose. You
can optionally implement a server side business object for generating and
receiving a recordset, or you can use the default business object that RDS
provides within its server-side components. You are required to use
Internet Information Server (IIS) to host the RDS Server components only if
using the HTTP or HTTPS protocols. Using DCOM to marshal objects (recordset
or otherwise) with RDS eliminates the IIS dependency. RDS provides the
advantages of client-side caching of data results, updateable data, and
support for some data-aware ActiveX controls.
The Microsoft Data Access Components (MDAC), is the combination of these
four technologies as well as various ODBC Drivers and OLE DB Data
Providers. MDAC also includes, increasingly with version 1.5 and later,
extensions to both OLE DB and ADO, most notably (but not limited to) On-
line Analytical Processing, or Multi-Dimensional data. There have been
three significant releases of MDAC components, but only one of those
releases was publicly known as MDAC. MDAC 1.0 did not ship as a
coordinated, stand-alone setup program, but was included piecemeal with
various Software Development Kit (SDK)'s and products. MDAC 1.5 did feature
a complete, stand-alone installation and was also included with various
SDK's and products. MDAC 2.0 was renamed to the Data Access SDK, and both
the ODBC and OLE DB SDK's were rolled into the Data Access 2.0 SDK.
Microsoft refers to MDAC 2.0 components as the run-time (non-SDK elements)
of the Data Access 2.0 SDK.
For the sake of clarity, we will refer to a MDAC stack as a specific
collection of ODBC, OLE DB, ADO, and RDS runtime components. For example,
the MDAC 1.0 stack contained ODBC 3.0, OLE DB 1.1, ADO 1.0 and the Advanced
Data Connector 1.0. (The Advanced Data Connector was the immediate
precursor to the Remote Data Service released in MDAC 1.5). The MDAC 1.5
stack included ODBC 3.5, OLE DB 1.5, ADO 1.5, and RDS 1.5. The MDAC 2.0
stack includes ODBC 3.51, OLE DB 2.0, ADO 2.0, RDS 2.0, OLE DB for OLAP
extensions and ADO/MD.
We will refer to MDAC redistribution as the mechanism that installs just
the run-time components for a given MDAC stack. Anything else, which
includes the ODBC 3.X SDK, OLE DB 1.X SDK, and the MDAC stand-alone setup,
contains a superset of the redistribution, adding samples, documentation,
headers, libraries, and so forth. You would use a MDAC redistribution with
the installation used to distribute your application to customers, and you
would use the MDAC or SDK setups to install on your development computer to
create those applications. This distinction is especially important to
remember when we discuss MDAC 1.5 setup and redistribution scenarios.
Universal Data Access, the Microsoft Data Access Components, the Data
Access SDK, the ODBC SDK, and the OLE DB SDK, are all different faces for
Microsoft's database strategy.
The MDAC 1.0 Stack
MDAC 1.0 existed more as concept than a coordinated, stand-alone setup
program. MDAC 1.0 components included ODBC 3.0, OLE DB 1.1, ADO 1.0, and
the Advanced Data Connector 1.0. The Advanced Data Connector, at the time,
utilized a subset of the ADO recordset and was independent of ADO.
Previously ODBC existed pretty much on its own, although the OLE DB 1.0 SDK
released in August of 1996 was beginning to point the way towards MDAC. In
the Winter of 1996, the MDAC 1.0 stack was released in a variety of
different distribution mechanisms, but without the centralized or
coordinated effort that arrived with MDAC 1.5.
ODBC 3.0 shipped with the ODBC 3.0 SDK (available at the time through Web
download), as well as Internet Information Server 3.0 and the OLE DB 1.1
SDK. OLE DB 1.1 and ADO 1.0 shipped with the OLE DB 1.1 SDK (available with
Visual Studio 97 or at the time through Web download), and with Internet
Information Server 3.0. The Advanced Data Connector shipped with Internet
Information Server 3.0, as well as being available (at the time) on the Web
as a downloadable .cab file.
MDAC 1.0 included ODBC Drivers for Access/Jet, SQL Server, and for the
first time, a Microsoft ODBC driver to expose Oracle data. The Microsoft
OLE DB Provider for ODBC Drivers was the first and only OLE DB provider
released with MDAC 1.0.
Visual Studio 97 was actually mix-and-match as to which product installed
which version of ODBC (and with it potentially OLE DB and ADO). Visual
Interdev, for example, included Active Server Pages, which was the
component of Internet Information Server 3.0 that installed ODBC 3.0, OLE
DB 1.1 and ADO/ADC 1.0. However, Visual Basic 5.0 installed ODBC version
2.65 and no OLE DB or ADO components. Visual C++ 5.0 installed ODBC 2.65,
but it also included install options for Visual Studio 97 with a choice of
installing the OLE DB 1.5 SDK, which gave you the entire MDAC 1.0 stack.
In general, mixing and matching ODBC drivers with the ODBC Driver
Manager/Core Components is a safe thing. As long as the ODBC Driver Manager
is more recent than the ODBC drivers, although the Product Group makes
great pains to ensure that the ODBC Driver Manager and Microsoft ODBC
Drivers are backwardly compatible.
The MDAC 1.5 Stack
With MDAC 1.5, more coordination was brought to both the setup of MDAC
components as well as redistribution. MDAC 1.5 consisted of ODBC 3.5, OLE
DB 1.5, ADO 1.5, and the Remote Data Service 1.5. The Remote Data Service
is the successor to the Advanced Data Connector, but was renamed to reflect
that it is increasingly a feature of ADO. With MDAC 2.0, the documentation
for RDS is included in the same location as for ADO.
Once again, portions of MDAC 1.5 were included with various SDK's and
products. MDAC 1.5 was released on the Web as a stand-alone setup, as well
as within the Windows NT 4.0 Option Pack and portions of MDAC 1.5 were
included in Internet Explorer 4.x, specifically the RDS Client components.
Windows 98 includes MDAC 1.5 components, and both the OLE DB 1.5 SDK and
the ODBC 3.5 SDK's contain MDAC 1.5 components.
MDAC 1.5 included the ODBC drivers for Microsoft Access/Jet, SQL Server,
and a significant update to the Microsoft Oracle ODBC Driver. In addition,
at the same time two other OLE DB Providers were available from Microsoft
(although not included with the MDAC Stack). OLE DB providers for the
Active Directory Services as well as for Microsoft Index Server were
available separately from the MDAC stack. Both of these providers leveraged
OLE DB's strengths in ways ODBC could have never supported, specifically
for using non-SQL query syntax to retrieve data through the OLE DB data
provider from a non-relational DataStore.
The Microsoft Data Access Components version 1.5 has had five(+) separate
releases, each with different versions of the Open Database Connectivity
(ODBC) 3.5, OLE DB 1.5, ActiveX Data Objects (ADO) 1.5, and Remote Data
Service (RDS) 1.5 components, as well as ODBC Drivers and OLE DB providers.
The first two releases, other than file version stamping, (and bugs fixed
in the setup) had no significant differences. An explanation of each
- Internet Explorer 4.0: Shipped with Internet Explorer 4.0, Internet
Client SDK 4.0, integrated within the setup of both products.
- MDAC 1.5 (PDC): Updated the components shipping with Internet Explorer,
and was only available on the 1997 Professional Developers Conference CD
within the MDAC Stand-Alone setup program.
- MDAC 1.5a: Available on the Web from 10/6/97 to 12/20/97 within the MDAC
Stand-Alone setup program.
- MDAC 1.5b: Available with the Windows NT 4.0 Option Pack, the MDAC
Stand-alone was actually integrated within the Option Pack (and not as a
- MDAC 1.5c: Available on the Web after 12/20/97, both with the MDAC
Stand-Alone and as a smaller MDAC redistribution that just installed the
run-time components. MDAC 1.5c also matches bits included with the OLE
DB 1.5 and ODBC 3.5 SDK's. The actual bug fixes between 1.5b and 1.5c
were incremental but significant, fixing problems with the ADO threading
and the ODBC Connection Pooling.
- Windows 98 and/or the Internet Explorer 4.01 Service Pack 1: Both
Internet Explorer 4.01 Service Pack 1 and Windows 98 contain a subset of
mixed versions of MDAC. They are the only place you can obtain a
modified version of ADO/RDS (essentially MDAC 1.5d), however, they do
not ship a complete ODBC or OLE DB, and the versions of the ODBC/OLE DB
files they do ship are older than MDAC 1.5c. The most significant change
between "1.5d" and "1.5c" is that Remote Data Service clients using DCOM
to marshal objects from a server no longer needed to mark the business
object as safe for scripting and initialization.
The MDAC 2.0 Stack
MDAC 2.0 is distributed within the Data Access
2.0 SDK, which combines and updates the contents of MDAC 1.5, the ODBC 3.5
SDK and the OLE DB 1.5 SDK, and the OLE DB for OLAP Specification. The Data
Access SDK combines all of the run-time components, documentation, samples,
and also provides an integrated redistribution in the
<drive>:\msdasdk\redist directory. Whereas previously the MDAC 1.5 stand-
alone and redistribution shipped separately (occasionally creating
confusion as to which one was which), the Data Access SDK is completely
self contained and integrated. The 40M size of the SDK versus the 7.9M size
of the MDAC 2.0 redistribution also helps make the difference clear.
The MDAC 2.0 redistribution comes in one version, and installs all of the
MDAC 2.0 components as well as the ODBC Drivers/OLE DB Providers for
Microsoft Access/Jet, Oracle and SQL Server. The Visual FoxPro ODBC driver
is also included in the redistribution. Previously this driver was only
available through web download.
Visual Studio 6.0 also ships MDAC 2.0 components, including a subset of
the full Data Access SDK. The Data Access SDK available on the Web
at the following site is actually newer than the Visual Studio 6.0 version:
In addition, the Web download includes the MDAC 2.0 run-time
components, whereas the Visual Studio 6.0 version does not. This is
because other parts of Visual Studio 6.0's setup install the MDAC