ODBC和OLEDB是底层的数据库接口,他们通过驱动程序访问数据文件,而DAO,RDO,ADO是上层数据库接口,他们向上与应用程序交互,向下与ODBC或OLEDB对话。另外,DAO也可以通过JET引擎访问数据文件。ADO是对OLEDB的封装。
ODBC与OLEDB:
OLE DB 标准的具体实现是一组C++ API函数,就像ODBC 标准中的ODBC API一样,不同的是,OLE DB 的API是符合COM 标准、基于对象的,而ODBC API则是简单的CAPI。
当ODBC成为数据库接口的标准之后,大多数关系数据库都提供了面向ODBC的驱动程序,使得该类型的数据库文件可以被ODBC访问。前面说过,ODBC只可以访问任何支持SQL语言的关系型数据库,而OLEDB可以访问各种类型的数据源,包括关系型数据库,所以说,符合ODBC标准的数据源是符合OLE DB标准的数据源的子集。那么,OLEDB是否可以取代ODBC呢?不会。符合ODBC的数据源要能够被OLE DB访问,符合OLE DB标准,还必须提供相应的OLEDB服务提供程序,叫做Microsoft OLE DB Provider for ODBC drivers。
现在,微软已经为所有的ODBC数据源提供了一个统一的OLEDB服务提供程序,这个东西允许你通过OLE与DB或ADO访问ODBC提供的所有功能。换言之,ODBC和OLEDB这两种技术是互补的,不能完全互相替换。
DAO与ODBC:
ODBC类只支持DML(Data Manipulation Language,数据操作语言),不支持DDL,所以用ODBC类只能完成数据的操作,不能涉及数据库的结构。要执行DDL操作,只有通过ODBC API。ODBC API是数据库厂商为程序设计者提供的直接访问数据库的一组函数。注意:这里要指出的是,虽然ODBC API提供了很多很方便而且强大的功能,但是通常来说ODBC API都比较难学,而且使用很容易出错。支持DDL是DAO对数据库编程良好支持的一个重要体现。DDL(Data Definition Language)在SQL术语中叫做"数据定义语言",它用来完成生成、修改和删除数据库结构的操作。
只要有ODBC驱动程序,DAO就可以访问ODBC数据源。二者都支持对各种ODBC数据源的访问。虽然二者使用的数据引擎不同,但都可以满足用户编写独立于DBMS的应用程序的要求。另外,DAO可以用Jet引擎访问两类数据库而无需通过ODBC驱动,一类是,*.MDB数据库,Microsoft Access 就是这类数据库,由于DAO是基于Microsoft Jet引擎的,因而在访问Access数据库(即*.MDB文件)时具有很好的性能。二类是,ISAM数据库,包括Btrieve、dBASEIII、dBASEIV、Microsoft FoxPro。
ADO与OLEDB:
我们已经知道,OLE DB 标准的API是C++ API,只能供C++语言调用(这也是OLE DB没有改名为ActiveX DB的原因,ActiveX 是与语言无关的组件技术)。为了使得流行的各种编程语言都可以编写符合OLE DB标准的应用程序,微软在OLE DB API 之上,提供了一种面向对象、与语言无关的应用编程接口,这就是ActiveX Data Objects,简称ADO。简而言之,ADO就是将OLE DB的面向C++的复杂接口封装起来,提供了便于操作的接口。
ADO与DAO,RDO:
ADO在编程难易程度方面比DAO和RDO都好(主要得益于简单的对象模型),但是在利用数据库的特性方面与RDO不相上下,但是ADO新版本的性能会比RDO更强。与DAO,RDO模型的层次结构不同,ADO基本上是一种平板结构:Command 和Recordset与Connection 之间并没有上下层次关系。换一种说法,DAO或RDO在定义Recordset对象时,必须先定义Connection对象,而ADO则可以不通过Connection而直接定义Recordset对象。
前面提到,ADO是DAO和RDO的后继产物,但是ADO目前还没有包含DAO的所有功能,目前的ADO并不支持数据定义语言(DLL),而我们已经知道DAO是支持DLL的。最终,Microsoft承诺将提供一个 ADO DDL 部件来帮助进行 DAO到 ADO 的移植,并为 OLE DB供应商提供一般的 DDL 支持。
ADO与ADO.NET:
ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。这也就是说ADO.NET和ADO的数据访问方式是不同的。
在 ADO 中,数据的内存中表示形式为记录集Recordset,而在 ADO.NET中,数据在内存中的形式为数据集Dataset。记录集看起来像单个表,如果要获得几个表的相关数据,必须使用 JOIN查询。相反,数据集是一个或多个表的集合。这样,数据集可以模仿基础数据库的结构。
ADO 的运作是一种在线方式,他对数据的操作必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。优点是效率高,在Web上,有上千个并行用户,系统资源是非常昂贵的。