OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。

简介

OLE 全称 Object Link and embed,即对象连接与嵌入。
作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。OLE DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE DB的应用程序会用到如下的请求序列: 初始化OLE 连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE  Object Linking and Embedding,对象连接与嵌入,简称OLE技术。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型。
OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。
DB(英文全称data base,数据库)是依照某种数据模型组织起来并存放二级存储器中的数据集合。

组成

OLE DB 最主要是由三个部分组合而成:
Data Providers 数据提供者
凡是透过OLE DB 将数据提供出来的,就是数据提供者。例如SQL Server 数据库中的数据表,或是附文件名为mdb 的Access 数据库档案等,都是Data Provider。
Data Consumers 数据使用者
凡是使用OLE DB 提供数据的程序或组件,都是OLE DB 的数据使用者。换句话说,凡是使用ADO 的应用程序或网页都是OLE DB 的数据使用者。
Service Components 服务组件
数据服务组件可以执行数据提供者以及数据使用者之间数据传递的工作,数据使用者要向数据提供者要求数据时,是透过OLE DB 服务组件的查询处理器执行查询的工作,而查询到的结果则由指针引擎来管理。

新概念

OLE DB 将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称:

数据提供者

(Data Provider)。提供数据存储的软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。

数据服务提供者

(Data Service Provider)。位于数据提供者之上、从过去的数据库管理系统中分离出来、独立运行的功能组件,例如查询处理器和游标引擎(Cursor Engine),这些组件使得数据提供者提供的数据以表状数据(Tabular Data)的形式向外表示(不管真实的物理数据是如何组织和存储的),并实现数据的查询和修改功能。SQL Server 7.0 的查询处理程序就是这种组件的典型例子。
业务组件(Business Component)。利用数据服务提供者、专门完成某种特定业务信息处理、可以重用的功能组件。分布式数据库应用系统中的中间层(Middle-Tier)就是这种组件的典型例子。
数据消费者(Data Consumer)。任何需要访问数据的系统程序或应用程序,除了典型的数据库应用程序之外,还包括需要访问各种数据源的开发工具或语言。

结构设计问题

开始编写 OLE DB 应用程序之前应考虑以下问题:
使用何种编程实现来编写 OLE DB 应用程序?
Microsoft 提供多种库来解决该问题:OLE DB 模板库、OLE DB 属性以及 OLE DB SDK 中的原始 OLE DB 接口。另外,Microsoft 还提供帮助您编写程序的向导。有关这些实现的更详细的信息,请参见 OLE DB 模板、属性和其他实现。
是否需要编写自己的提供程序?
大多数开发人员无需这样。Microsoft 提供多种提供程序。无论用户何时创建一个数据连接,例如,当使用 ATL OLE DB 使用者向导向项目中添加使用者时,“数据链接属性”对话框都将列出系统中所有被注册的可用提供程序。如果其中一个提供程序适合于用户自己的数据存储和数据访问应用程序,最简单的办法就是使用该提供程序。但是,如果用户的数据存储不适合所提供的类别,则必须创建自己的提供程序。有关创建提供程序的信息,请参见 OLE DB 提供程序模板及其子主题。
需要为自己的使用者提供何种级别的支持?
一些使用者可能非常简单,另一些可能非常复杂。OLE DB 对象的功能由属性指定。使用 ATL OLE DB 使用者向导创建使用者或者使用数据库提供程序向导创建提供程序时,向导将为用户设置合适的对象属性来提供一组标准功能。但是,如果向导生成的使用者类或提供程序类并不具有您需要的所有支持功能,那么您需要查阅这些类在 OLE DB 模板库中的接口。这些接口包装原始 OLE DB 接口,提供附加实现以使其使用起来更加简单。
例如,如果您希望更新行集合中的数据,但在使用向导创建使用者时却忘记指定该功能,则可以在创建使用者之后通过对命令对象设置 DBPROP_IRowsetChange 和 DBPROP_UPDATABILITY 属性来指定该功能。这样,当行集合创建之后,它将具有 IRowsetChange 接口。
您是否有使用其他数据访问技术(ADO、ODBC 或 DAO)的旧版代码?
由于可能有各样各样的技术组合(例如 ADO 组件和 OLE DB 组件一起使用、将 ODBC 代码迁移至 OLE DB 等等),所以 Visual C++ 文档不能涵盖所有的情形。

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 驱动程序之间的桥梁,理论上不会增加任何开销。

OLE DB 是什么?相关推荐

  1. 一致的数据访问技术ADO/OLE DB

    Microsoft新近推出的UDA(Universal Data Access,一致数据访 问技术)为关系型或非关系型数据访问提供了一致的访问接口,为企业 级Intranet应用多层软件结构提供了数据 ...

  2. [ADO.NET] 如何 使用 OLE DB 讀寫 Excel / 建立 Excel 檔案 (一)

    1.OLE DB的連線字串如下: //連線字串string cs ="Data Source=" + FileName + ";" +"Provide ...

  3. 无法初始化链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Jet.OLEDB.4.0 的数据源对象...

    无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象 今天从access导数据到 ...

  4. The Excel Connection Manager is not supported in the 64-bit version of SSIS, as no OLE DB provider i

    昨天朋友在64位环境开发SSIS的时候遇到一个问题: The Excel Connection Manager is not supported in the 64-bit version of SS ...

  5. 链接服务器 '(null)' 的 OLE DB 访问接口'STREAM' 返回了对列 '[!BulkInsert].field' 无效的数据...

    SSIS中数据流任务或者 DTS数据表对表同步(一般是从文本导到数据库表中),抛出下面异常 链接服务器 '(null)' 的 OLE DB 访问接口'STREAM' 返回了对列 '[!BulkInse ...

  6. Could not execute query against OLE DB provider 'OraOLEDB.Oracle'

    Could not execute query against OLE DB provider 'OraOLEDB.Oracle' 这段错误目前我遇到的状况是在SQL Server上用openquer ...

  7. asp dsn mysql 连接失败_ASP连接MySQL遇到一些问题 Microsoft OLE DB Provider for ODBC Drivers (0x80004005)...

    这个问题是别人请教我的,我拿到的时候以为很简单,于是在搜索引擎中搜索"ASP连接MySQL字符串"结果一大堆就出来了,等我配置好ASP IIS环境.安装好MySQL,并兴建了一个A ...

  8. BarTender操作遇到OLE DB遇到了错误0x80004005”的问题

    在使用BarTender打印条码时操作遇到"OLE DB遇到了错误0x80004005"的问题 在打印时关掉数据库所连接的Excel文件即可 转载于:https://www.cnb ...

  9. 尚未注册 OLE DB 访问接口 SQLNCLI10 7043 错误

    =================================== 与链接服务器的测试连接失败. =================================== 执行 Transact-S ...

  10. C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

    C# OLE DB 的连接方式下 对 sql 参数的操作 需要改成 ? 号

最新文章

  1. Case Study. Technical and Commercial understating. Internal use only.
  2. Can‘t attach to the process: ptrace(PTRACE_ATTACH, ..)
  3. [html] 如何使用纯html制作一个进度条?
  4. Linux fork的写时复制
  5. command对象的三个主要方法 1120
  6. python可视化的图表汉字显示成框框_Matplotlib图表上输出中文(汉字)、减号问题...
  7. mysql8连接java_JAVA连接MYSQL8.0问题
  8. 2022PMP考试敏捷知识点(3)
  9. 转载 word标题级别与编号不关联的处理办法
  10. 即时通信多媒体分享与文件共享
  11. 一文搞懂CSS 3D动画效果
  12. Pycharm中的Python Console与Terminal
  13. 7-14 输出大写英文字母 (15分) 瞎搞
  14. 解决谷歌浏览器无法输入中文的问题
  15. Java中的四个核心技术思想
  16. 程序人生—我已经努力了七年
  17. 文件操作之特殊文件操作
  18. UE4(unreal engine4)蒙太奇动画删除不想要的帧数
  19. 小猫爪:汽车电子小知识02- ISO14229-1(UDS)简介
  20. 选购电脑cpu 酷睿 区别 GPU选择

热门文章

  1. 一文看懂数据服务DaaS
  2. 零基础小白转行web前端,该怎么学?
  3. mysql delayed_Mysql INSERT DELAYED语法
  4. Qt信号发送过快,槽函数处理不过来解决方法
  5. 你真的了解main函数吗?
  6. 《PR基础教程入门篇-学习笔记》-010
  7. 看完相当于学过并实践用过arduino! ——复现arduino开发板的众多小实验
  8. 字符集与编码五之代码单元及length方法
  9. 西门子与IDS携手合作,为Simcenter新增高频电磁工程解决方案
  10. LINUX系统如何安装字体