Universal Data Access is Microsoft's strategy for providing high-performance access to all types of information (including relational andnon-relational data) across an organization from the desktop to enterprisesystems. 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 formanipulating relational data using SQL query syntax across disparatedatasources. ODBC has the advantage of being an international standard thatallows you to manipulate a vast array of relational datasources throughnumerous ODBC Drivers from both Microsoft and third party vendors. The keydisadvantage of ODBC is that it is limited to relational, SQL-syntax baseddata.
OLE DB is Microsoft's strategic low-level interface to data across theorganization. OLE DB is an open specification designed to build on thesuccess of ODBC by providing an open standard for accessing all kinds ofdata. OLE DB imposes no specific limitation on either the query syntax, orthe structure of the data exposed as long as it can be retrieved in tabularform. An OLE DB Data Provider is analogous to an ODBC Driver, exposing aDataSource to an OLE DB Consumer, such as ADO. An increasing variety of OLEDB Data Providers are being released by both Microsoft and third partyvendors. The first OLE DB Data Provider, the Microsoft OLE DB Provider forODBC Drivers, enables you to expose any ODBC DataSource to an OLE DBconsumer.
ADO is Microsoft's strategic, language-neutral, high-level interface todata exposed by OLE DB. ADO provides consistent, high-performance access todata, whether you are creating a front-end database client or middle-tierbusiness object using an application, tool, language, or even an Internetbrowser. ADO is the single data interface you need to know for 1 to n-tierclient/server and Web-based data-driven solution development. ADO is thedefinitive OLE DB Consumer, although you could write your consumerapplication using C++ directly to a OLE DB provider.
The Microsoft Remote Data Service (RDS) allows you to use an ADO recordsetremotely across one of three protocols (HTTP, HTTPS, or DCOM). RDS wasoriginally intended for Web-based clients, but you are free to implementyour RDS client in any development environment or language you choose. Youcan optionally implement a server side business object for generating andreceiving a recordset, or you can use the default business object that RDSprovides within its server-side components. You are required to useInternet Information Server (IIS) to host the RDS Server components only ifusing the HTTP or HTTPS protocols. Using DCOM to marshal objects (recordsetor otherwise) with RDS eliminates the IIS dependency. RDS provides theadvantages of client-side caching of data results, updateable data, andsupport for some data-aware ActiveX controls.
The Microsoft Data Access Components (MDAC), is the combination of thesefour technologies as well as various ODBC Drivers and OLE DB DataProviders. 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 beenthree significant releases of MDAC components, but only one of thosereleases was publicly known as MDAC. MDAC 1.0 did not ship as acoordinated, stand-alone setup program, but was included piecemeal withvarious Software Development Kit (SDK)'s and products. MDAC 1.5 did featurea complete, stand-alone installation and was also included with variousSDK's and products. MDAC 2.0 was renamed to the Data Access SDK, and boththe 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 specificcollection 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 AdvancedData Connector 1.0. (The Advanced Data Connector was the immediateprecursor to the Remote Data Service released in MDAC 1.5). The MDAC 1.5stack included ODBC 3.5, OLE DB 1.5, ADO 1.5, and RDS 1.5. The MDAC 2.0stack includes ODBC 3.51, OLE DB 2.0, ADO 2.0, RDS 2.0, OLE DB for OLAPextensions and ADO/MD.
We will refer to MDAC redistribution as the mechanism that installs justthe run-time components for a given MDAC stack. Anything else, whichincludes 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 withthe installation used to distribute your application to customers, and youwould use the MDAC or SDK setups to install on your development computer tocreate those applications. This distinction is especially important toremember when we discuss MDAC 1.5 setup and redistribution scenarios.
Universal Data Access, the Microsoft Data Access Components, the DataAccess SDK, the ODBC SDK, and the OLE DB SDK, are all different faces forMicrosoft's database strategy.
The MDAC 1.0 Stack
MDAC 1.0 existed more as concept than a coordinated, stand-alone setupprogram. MDAC 1.0 components included ODBC 3.0, OLE DB 1.1, ADO 1.0, andthe 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 SDKreleased in August of 1996 was beginning to point the way towards MDAC. Inthe Winter of 1996, the MDAC 1.0 stack was released in a variety ofdifferent distribution mechanisms, but without the centralized orcoordinated effort that arrived with MDAC 1.5.
ODBC 3.0 shipped with the ODBC 3.0 SDK (available at the time through Webdownload), as well as Internet Information Server 3.0 and the OLE DB 1.1SDK. OLE DB 1.1 and ADO 1.0 shipped with the OLE DB 1.1 SDK (available withVisual Studio 97 or at the time through Web download), and with InternetInformation Server 3.0. The Advanced Data Connector shipped with InternetInformation Server 3.0, as well as being available (at the time) on the Webas a downloadable .cab file.
MDAC 1.0 included ODBC Drivers for Access/Jet, SQL Server, and for thefirst time, a Microsoft ODBC driver to expose Oracle data. The MicrosoftOLE DB Provider for ODBC Drivers was the first and only OLE DB providerreleased with MDAC 1.0.
Visual Studio 97 was actually mix-and-match as to which product installedwhich version of ODBC (and with it potentially OLE DB and ADO). VisualInterdev, for example, included Active Server Pages, which was thecomponent of Internet Information Server 3.0 that installed ODBC 3.0, OLEDB 1.1 and ADO/ADC 1.0. However, Visual Basic 5.0 installed ODBC version2.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 ofinstalling 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 DriverManager/Core Components is a safe thing. As long as the ODBC Driver Manageris more recent than the ODBC drivers, although the Product Group makesgreat pains to ensure that the ODBC Driver Manager and Microsoft ODBCDrivers are backwardly compatible.
The MDAC 1.5 Stack
With MDAC 1.5, more coordination was brought to both the setup of MDACcomponents as well as redistribution. MDAC 1.5 consisted of ODBC 3.5, OLEDB 1.5, ADO 1.5, and the Remote Data Service 1.5. The Remote Data Serviceis the successor to the Advanced Data Connector, but was renamed to reflectthat it is increasingly a feature of ADO. With MDAC 2.0, the documentationfor RDS is included in the same location as for ADO.
Once again, portions of MDAC 1.5 were included with various SDK's andproducts. MDAC 1.5 was released on the Web as a stand-alone setup, as wellas within the Windows NT 4.0 Option Pack and portions of MDAC 1.5 wereincluded 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 andthe 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 theActive Directory Services as well as for Microsoft Index Server wereavailable separately from the MDAC stack. Both of these providers leveragedOLE DB's strengths in ways ODBC could have never supported, specificallyfor using non-SQL query syntax to retrieve data through the OLE DB dataprovider from a non-relational DataStore.
The Microsoft Data Access Components version 1.5 has had five(+) separatereleases, each with different versions of the Open Database Connectivity(ODBC) 3.5, OLE DB 1.5, ActiveX Data Objects (ADO) 1.5, and Remote DataService (RDS) 1.5 components, as well as ODBC Drivers and OLE DB providers.The first two releases, other than file version stamping, (and bugs fixedin the setup) had no significant differences. An explanation of eachfollows:
- 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 separate setup).
- 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 Access2.0 SDK, which combines and updates the contents of MDAC 1.5, the ODBC 3.5SDK and the OLE DB 1.5 SDK, and the OLE DB for OLAP Specification. The DataAccess 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 creatingconfusion as to which one was which), the Data Access SDK is completelyself contained and integrated. The 40M size of the SDK versus the 7.9M sizeof the MDAC 2.0 redistribution also helps make the difference clear.
The MDAC 2.0 redistribution comes in one version, and installs all of theMDAC 2.0 components as well as the ODBC Drivers/OLE DB Providers forMicrosoft Access/Jet, Oracle and SQL Server. The Visual FoxPro ODBC driveris also included in the redistribution. Previously this driver was onlyavailable through web download.
Visual Studio 6.0 also ships MDAC 2.0 components, including a subset ofthe full Data Access SDK. The Data Access SDK available on the Webat the following site is actually newer than the Visual Studio 6.0 version:
In addition, the Web download includes the MDAC 2.0 run-timecomponents, whereas the Visual Studio 6.0 version does not. This isbecause other parts of Visual Studio 6.0's setup install the MDACrun-time components.