MDAC, SNAC and ADO.NET (Data Access Technologies)

I've been working with ADO.NET for sometime and so know a thing or two about it but what about MDAC, SNAC? How do they fit in and relate to each other (if at all)

Starting off with a few acronyms:
MDAC – Microsoft Data Access Components
SNAC – SQL Native Client
ADO – ActiveX Data Objects
ADO.NET – ADO for .NET Framework (but due to enhancements, can be considered an entirely different product rather than just an upgrade)
OLEDB – Object Linking and Embedding (OLE) DB (for database)
ODBC – Open DataBase Connectivity

The three are termed as "Data Access tehnologies" and thus includes a number of components (eg. providers) to access/connect to data (or services)

Here are some important points: [more]
    – recommended for managed code development (working with .NET Framework)
    – comes with .NET Framework installation
    – System.Data namespace in .NET
        – "sub" namespace for specific data provider (eg. System.Data.SqlClient for MSSQL Server)
    – Overview of ADO.NET

    – recommended if you are writing native code targetting Windows or if you need to write a classic ASP, Visual Basic 6.0x COM, or C++ application
    – latest version is MDAC 2.8
    – comes with Windows XP Service Pack 2. Otherwise can be downloaded from here
    – to determine what version you have, use Component Checker, from the same link above
    – allows access to connection pooling, memory management, client cursor support
    – can be used to support access to SQL Server versions prior to 7.0
    – three interfaces for MDAC: ODBC, OLEDB, ADO
    – ODBC
        – involves the concept of Data Source Name (DSN) which identifies the correct driver to use for the access
            – to create a DSN, click Start > Control Panel > Administrative Tools > Data Sources (ODBC)
            – sample connection string "DSN=myDSN;Uid=myUID;Pwd=myPwd"
                – where myDSN is an existing (user or system) DSN name
                – for fileDSN an example is "FILEDSN=c:dataConn.dsn;Uid=myUid;Pwd=myPwd"
                – depending on the datasource you're accessing, you might not need the Uid (user id) or Pwd (password)
        – typically used with C++ but if you have a compelling reason to use ODBC with VB.NET or C#.NET refer to these
    – OLEDB
        – considered the fastest and most consistent option when coding in C++
        – doesn't require DSN
        – for more considerations and information, refer to "OLE DB Programmer's Reference" at
    – ADO
        – used for scripting languages (eg. VBScript, ASP, JScript)
        – a DSN or a DSN-less connection can be used

    – recommended if you need to access the latest features in SQL Server 2005 using ODBC or OLEDB
    – introduced in SQL 2005
    – used for COM based applications (otherwise use ADO.NET)
    – support for SQL 2005 features like database mirroring, Multiple Active Result Sets (MARS), query notifications, user defined types (UDT) and XML data types
    – stricter error handling than MDAC and reveals more information for errors
    – doesn't allow access to connection pooling, memory management, client cursor support (unlike MDAC)
    – doesn't implement ADO (although it does enable one to access functionality of ADO)
        – will demonstrate in a while
    – wraps OLEDB and ODBC into one DLL, thus enables it to perform quickly and can be secured easily
    – for SNAC usage, check this link :
        – or for updating applications to use SNAC from MDAC –
    – MSDN on SQL Native Client

Both SQL Native Client and MDAC support read committed transaction isolation using row versioning, but only SQL Native Client supports snapshot transaction isolation.

Ohh if I may add, Wikipedia has some good overview on these too.

Reference: MCITP 70-442 Self-Paced Traning Kit