OLE-DB与ODBC

1.OLE-DB
      OLE-DB(Object Linking and Embedding, Database),是微软的战略性的通向不同的数据源的低级应用程序接口。OLE-DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。 
      作为微软的组件对象模型(COM)的一种设计,OLE-DB是一组读写数据的方法(在过去可能被称为渠道)。OLD-DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE-DB的应用程序会用到如下的请求序列:初始化OLE连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE。
      对象连接与嵌入,简称OLE。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型。 OLE是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。
      OLE-DB 将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称:
      数据提供者(Data Provider):提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。
      数据服务提供者(Data Service Provider):位于数据提供者之上、从过去的数据库管理系统中分离出来、独立运行的功能组件,例如查询处理器和游标引擎(Cursor Engine),这些组件使得数据提供者提供的数据以表状数据(Tabular Data)的形式向外表示(不管真实的物理数据是如何组织和存储的),并实现数据的查询和修改功能。SQL Server 7.0 的查询处理程序就是这种组件的典型例子。
      业务组件(Business Component):利用数据服务提供者、专门完成某种特定业务信息处理、可以重用的功能组件。分布式数据库应用系统中的中间层(Middle-Tier)就是这种组件的典型例子。
      数据消费者(Data Consumer):任何需要访问数据的系统程序或应用程序,除了典型的数据库应用程序之外,还包括需要访问各种数据源的开发工具或语言。
2.ODBC
     ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问DBMS。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性:与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。微软公司在1993年以DLL集的方式发布了世界上第一个ODBC产品,现在成为了微软开放服务结构(WOSA,Windows Open Services Architecture)中,有关数据库的一个组成部分。微软的ODBC产品其实就是一个ODBC的驱动管理器,提供一个ODBC应用程序到某种ODBC驱动的接口。在UNIX系统上,有两个开源的ODBC驱动管理器,unixODBC和iODBC。 
     一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
      一个完整的ODBC由下列几个部件组成:
      应用程序(Application)。
      ODBC管理器(Administrator):该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。
      驱动程序管理器(Driver Manager): 驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。
      ODBC API
      ODBC 驱动程序:是一些DLL,提供了ODBC和数据库之间的接口。
      数据源:数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。
      应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。
      在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。 在访问ODBC数据源时需要ODBC驱动程序的支持。
3.OLE-DB与ODBC的关系
      由于OLE-DB 和ODBC标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE-DB 是不是替代ODBC 的新标准?答案是否定的。实际上,ODBC标准的对象是基于SQL 的数据源(SQL-Based Data Source),而OLE-DB 的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC标准的数据源是符合OLE-DB标准的数据存储的子集。符合ODBC标准的数据源要符合OLE-DB 标准,还必须提供相应的OLE-DB 服务程序(Service Provider),就像SQL Server 要符合ODBC标准,必须提供SQL Server ODBC 驱动程序一样。现在,微软自己已经为所有的ODBC 数据源提供了一个统一的OLE-DB 服务程序,叫做ODBC OLE DB Provider。
      ODBC OLE DB Provider 发布之后,有人又担心:ODBC Provider 是不是在ODBC 之上的新的层次(Layer)?如果是,那么使用OLE DB 访问ODBC 数据源是否将影响性能?答案也是否定的。实际上,ODBC Provider 的作用,是替换ODBC Driver Manager,作为应用程序与ODBC 驱动程序之间的桥梁,理论上不会增加任何开销。
 
      各部件之间的关系如图下图所示:
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章