OLEDB 和 ODBC 数据源之间的区别是什么?

我正在读一篇关于枢轴缓存的 MSExcel 帮助文章,想知道他们所说的 OLEDB 和 ODBC 源是什么意思

你应该用指令文本 属性而不是 SQL 属性, 现在主要存在于 与早期版本的 如果您同时使用 属性,则 CommandText 属性的 值优先。

对于 OLEDB 源代码,CommandType 属性的值 属性。

对于 ODBC 的消息来源,CommandText 属性的函数完全类似于 属性,并设置该属性 导致数据被刷新..。

非常感谢你的简短回答。

287105 次浏览

在一个非常基本的层次上,这些只是针对不同数据源(即数据库)的不同 API。OLEDB 更新,可以说更好。

你可以在维基百科上了解更多:

  1. OLE DB
  2. ODBC

也就是说,您可以使用 ODBC 驱动程序或 OLEDB 驱动程序连接到同一个数据库。在这些情况下,数据库行为的不同之处在于您的书中提到了什么。

我不确定所有的细节,但是我的理解是 OLE DB 和 ODBC 是两个 API,它们可以连接到各种类型的数据库,而不必处理每个数据库的所有实现细节。根据 关于 OLEDB 的维基百科文章,OLE DB 是微软 ODBC 的继承者,并提供了一些 ODBC 可能无法提供的特性,例如访问电子表格作为数据库源。

ODBC:-仅用于关系数据库(SqlServer、 Oracle 等)

OLEDB:-适用于关系数据库和非关系数据库(Oracle、 Sql-Server、 Excel、原始文件等)

根据 奥莱利传媒于2001年出版了杰森 · T · 罗夫的著作《 ADO 》(这里有一个很好的示意图) ,他说的正是 MOZILLA 所说的。

(直接从那本书的第7页开始)

  • ODBC 只提供对关系数据库的访问
  • OLEDB 提供了以下特性
  • 无论数据的格式或位置如何,都可以访问数据
  • 完全访问 ODBC 数据源和 ODBC 驱动程序

因此,似乎 OLEDB 与基于 SQL 的数据源交互,THRU ODBC 驱动程序层。

alt text

我不能百分之百确定这个图像是正确的。我不确定的两个连接是 ADO.NET 到 ADO C-api 和 OLE DB 到 ODBC 到基于 SQL 的数据源(因为在 这张图中作者没有把 OLE DB 的访问放到 ODBC 中,我认为这是一个错误)。

以下是我的理解(非权威) :

ODBC 是大多数软件供应商支持的与技术无关的开放标准。 OLEDB 是一个来自 COM 时代的 特定技术微软 API (COM 在.NET 之前是一种组件和互操作性技术)

在某种程度上,各种数据源供应商(例如 Oracle 等) ,愿意与微软的数据消费者兼容,为他们的产品开发了 OLEDB 提供程序,但大部分 OLEDB 仍然是微软专有的标准。现在,大多数 微软数据源都允许 ODBC 和 OLEDB 访问,主要是为了与遗留 ODBC 数据使用者兼容。此外,还存在 OLEDB 提供程序(包装器) ,它允许使用 OLEDB 访问 ODBC 数据源(如果愿意的话)。

就特性而言,OLEDB 比 ODBC 丰富得多,但是却患有“一个环到所有规则”综合症(过于通用、过于复杂、不固执己见)。

在非微软的世界中,基于 ODBC 的数据提供程序和客户机被广泛使用,并且不会到任何地方。

微软内部正在逐步淘汰 OLEDB,转而支持本地化。NET API 构建在该数据源的本机传输层之上(例如,用于 MS SQL Server 的 TDS)。

两者都是数据提供程序(API,代码将使用该 API 与数据源进行对话)。Oledb 是在1998年引入的,旨在替代 ODBC (在1992年引入)

在微软网站上,本地 OLEDB 提供程序直接应用于 SQL 服务器,另一个 OLEDB 提供程序 OLEDB 提供程序用于 ODBC 访问其他数据库,如 Sysbase、 DB2等。OLEDB 提供程序下有不同种类的组件。有关更多信息,请参见 基于 MSDN 的分布式查询

要了解 M $发明 OLEDB 的原因,您不能将 OLEDB 与 ODBC 进行比较。相反,您应该将 OLEDB 与 DAO、 RDO 或 ADO 进行比较。后者在很大程度上依赖于 SQL。但是,OLEDB 依赖 COM。但是 ODBC 已经存在很多年了,所以有一个 OLEDB-ODBC 桥来补救这个问题。我认为当 M $发明 OLEDB 的时候,会有一个宏大的蓝图。

ODBC 只能用于关系数据库,不能用于非关系数据库,如 MsExcel 文件。Olebd 可以做任何事。

‧2011年8月: Microsoft 不赞成 OLE DB (Microsoft 正在与 ODBC 结盟以进行本机关系数据访问)

‧2017年10月: Microsoft 不赞成 OLE DB (宣布 SQLServer 的 OLEDB 驱动程序的新版本)

ODBC 和 OLEDB 是两种相互竞争的数据访问技术。特别是对于 SQLServer,微软已经将它们作为首选的未来发展方向进行了推广——尽管是在不同的时间。

ODBC

ODBC 是用于访问类似表的数据的全行业标准接口。它主要是为数据库开发的,在记录集合中显示数据,每个记录集合被分组成一个字段集合。每个字段都有适合其所包含的数据类型的数据类型。 每个数据库供应商(Microsoft、 Oracle、 Postgres 等)都为其数据库提供一个 ODBC 驱动程序。

还有一些对象的 ODBC 驱动程序,尽管它们不是数据库表,但它们非常相似,以相同的方式访问数据非常有用。例如电子表格、 CSV 文件和柱状报告。

OLE DB

OLEDB 是 Microsoft 用于访问数据的技术。与 ODBC 不同的是,它包含类似表和非表的数据,如电子邮件消息、网页、 Word 文档和文件目录。然而,它是面向过程而不是面向对象的,并且被认为是一个相当困难的接口,用于开发对数据源的访问。为了克服这个问题,ADO 被设计成 OLE DB 之上的一个面向对象层,并提供一种更简单、更高层次(尽管仍然非常强大)的使用方法。ADO 的巨大优势在于,您可以使用它来操作特定于给定类型的数据源的属性,就像您可以使用它来访问适用于所有数据源类型的属性一样容易。你并不局限于某些令人不满的最小公分母。

虽然所有数据库都有 ODBC 驱动程序,但它们并不都有 OLEDB 驱动程序。但是,如果希望以类似于 OLEDB 的方式访问 OLE 和 ODBC,则可以使用 OLE 和 ODBC 之间的接口。此接口称为 MSDASQL (ODBC 的 MicrosoftOLEDB 提供程序)。

数据访问技术

由于 SQLServer 是(1)微软制造的,(2) 微软数据库平台,ODBC 和 OLEDB 自然适合它。

ODBC

由于所有其他数据库平台都有 ODBC 接口,微软显然必须为 SQLServer 提供一个。除此之外,MicrosoftAccess 中最初的默认技术 DAO 使用 ODBC 作为与所有外部数据源通信的标准方式。这使得 ODBC 接口成为一个必要条件。 SQLServer2000发布的 SQLServer 版本6 ODBC 驱动程序仍然存在。已经发布了更新版本,以处理随后发布的新数据类型、连接技术、加密、 HA/DR 等。截至2018年9月7日,最新版本是2018年3月23日发布的 v13.1“ ODBC Driver for SQL Server”。

OLE DB

这是微软自己的技术,从2002年到2005年,他们一直在大力推广这项技术,同时伴随着 ADO 层。他们显然希望它能成为首选的数据访问技术。(他们甚至把 ADO 列为 Access2002/2003中访问数据的默认方法。)然而,由于以下原因,这种情况最终显然不会发生:

  1. 世界不会转向微软的技术 远离 ODBC;
  2. DAO/ODBC 比 ADO/OLE DB 快,而且完全集成到 MS Access 中,因此不会自然死亡;
  3. 微软正在开发的新技术,特别是 ADO.NET, ADO.NET 也可以直接与 OLE 对话 DB 也是如此(因此把 ADO 留在了死水中) ,但是它不是(不像) ADO)完全依赖于它。

由于这些原因,Microsoft 实际上是在 v11之后发布了用于 SQLServer 的 不推荐使用 OLEDB 作为数据访问技术(SQLServer2012)。在此之前的几年里,他们一直在生产和更新 SQLServerNativeClient,它同时支持 ODBC 和 OLEDB 技术。然而,在2012年末,他们宣布将与 ODBC 结盟,以便在 SQLServer 中访问本机关系数据,并鼓励其他人也这样做。他们进一步指出,在 v11/SQLServer2012之后发布的 SQLServer 将积极地 没有支持 OLEDB!

这一声明引起了一场抗议风暴。人们不明白为什么微软突然放弃了一项他们花了数年时间才让他们致力于的技术。此外,SSAS/SSRS 和 SSIS 是与 SQL Server 紧密连接的 MS 编写的应用程序,它们完全或部分依赖于 OLE DB。还有一个抱怨是,OLE DB 有一些令人满意的特性,似乎不可能移植回 ODBC ——毕竟,OLE DB 有许多优点。

2017年10月,微软放松了对 正式取消 OLEDB的要求。他们宣布即将推出一个新的驱动程序(MSOLEDBSQL) ,该驱动程序将具有原生客户机11的现有特性集,并将引入多子网故障转移和 TLS 1.2支持。司机于2018年3月获释。