ODBC仅支持关系数据库,以及传统的数据库数据类型,并且只以C/C++语言API(API就是一些C语言的代码,是最底层的程序,在windows中就是一些.dll的文件)形式提供服务,因而无法符合日渐复杂的数据存取应用,也无法让脚本语言使用。对于后来的EXCEL等根本不能支持!
现今的应用程序很可能需要从不同的数据源取得数据,加以处理,再把处理过的数据输出到另外一个数据源中。随着数据源日益复杂化,数据源可能不是传统的关系数据库,而可能是Excel文件、Email、Internet/Intranet上的电子签名信息。
Microsoft在1997年提出了OLE-DB(Object Link and embed,对象连接与嵌入)架构,定义了统一的COM接口做为存取各类不同的数据源的标准,并且封装在一组COM对象之中,协助程序员存取企业中各类不同的数据源。如下图
使用者和提供者都是 COM 对象,并能够通过一套 COM 接口互相通信。这种基于 COM 的通信可被概括为在抽象对象(如 DataSource、Session、Command 和 Rowset)上执行的操作。
在OLE DB中,采用 C++ 的概念进行设计,将不会有ODBC体系的drive API(C语言)的概念,取而代之的是提供者(provider)的概念。
OLE DB 标准的具体实现是一组C++ API 函数,就像ODBC 标准中的ODBC API 一样,不同的是,OLE DB 的API 是符合COM 标准、基于对象的(而ODBC API 则是简单的C 语言API,面向过程的)。
OLEDB 和ODBC的相互关系
1,由于OLE DB 和ODBC 标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE DB 是不是替代ODBC 的新标准?
答案是否定的。
实际上,ODBC 标准的对象是基于SQL 的数据源(SQL-Based Data Source),而OLE DB 的对象则是范围更为广泛的任何数据存储。
现在,微软自己已经为所有的ODBC 数据源提供了一个统一的OLE DB 服务程序,叫做ODBC OLE DB Provider。
2,ODBC OLE DB Provider 发布之后,有人,担心:ODBC OLE DB Provider 是不是在ODBC 之上的新的层次(Layer)?
如果是,那么使用OLE DB 访问ODBC 数据源是否将影响性能?
答案也是否定的。
实际上,从图看出,ODBC OLE DB Provider 的作用,是替换ODBC Driver Manager,作为应用程序与ODBC 驱动程序之间的桥梁,理论上不会增加任何开销。