187

我正在阅读一篇关于 pivotcache 的 MS Excel 帮助文章,想知道OLE DB 和 ODBC 源是什么意思

...您应该使用 CommandText 属性而不是 SQL 属性,该属性现在主要是为了与早期版本的 Microsoft Excel 兼容。如果同时使用这两个属性,则 CommandText 属性的值优先。

对于OLE DB 源,CommandType 属性描述了 CommandText 属性的值。

对于ODBC 源,CommandText 属性的功能与 SQL 属性完全相同,设置该属性会导致数据被刷新...

我非常感谢您的简短回答。

4

11 回答 11

163

根据ADO: ActiveX Data Objects,Jason T. Roff 的一本书,由 O'Reilly Media 于 2001 年出版(这里的图表很好),他准确地表达了 MOZILLA 所说的。

(直接来自那本书的第 7 页)

  • ODBC 仅提供对关系数据库的访问
  • OLE DB 提供以下功能
    • 访问数据,无论其格式或位置如何
    • 完全访问 ODBC 数据源和 ODBC 驱动程序

因此,OLE DB 似乎通过 ODBC 驱动程序层与基于 SQL 的数据源进行交互。

替代文字

我不是 100% 确定这张图片是正确的。 我不确定的两个连接是通过 ADO C-api 的 ADO.NET 和通过 ODBC 到基于 SQL 的数据源的 OLE DB(因为在此图中,作者没有通过 ODBC 访问 OLE DB,我相信是一个错误)。

于 2009-07-13T15:05:52.067 回答
59

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

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

于 2009-04-24T09:47:52.490 回答
44

这是我的理解(非权威):

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

在某些时候,愿意与 Microsoft 数据消费者兼容的各种数据源供应商(例如 Oracle 等)为他们的产品开发了 OLEDB 提供程序,但在大多数情况下,OLEDB 仍然是 Microsoft 独有的标准。现在,大多数Microsoft数据源都允许 ODBC 和 OLEDB 访问,主要是为了与旧的 ODBC 数据消费者兼容。此外,还存在用于 ODBC 的 OLEDB 提供程序(包装器),如果愿意,它允许使用 OLEDB 访问 ODBC 数据源。

就功能而言,OLEDB 比 ODBC 丰富得多,但存在“一环一统”综合症(过于通用、过于复杂、没有意见)。

在非 Microsoft 世界中,基于 ODBC 的数据提供者和客户端被广泛使用,而且无处不在。

微软内部正在逐步淘汰 OLEDB,取而代之的是构建在该数据源的任何本机传输层之上的本机 .NET API(例如,用于 MS SQL Server 的 TDS)。

于 2009-07-13T17:37:43.977 回答
27

ODBC 和 OLE DB 是两种相互竞争的数据访问技术。特别是关于 SQL Server,微软已经将它们都提升为他们的首选未来方向——尽管是在不同的时间。

ODBC

ODBC 是用于访问类似表格的数据的行业标准接口。它主要是为数据库开发的,并以记录集合的形式呈现数据,每个记录都被分组到一个字段集合中。每个字段都有自己的数据类型,适合其包含的数据类型。每个数据库供应商(Microsoft、Oracle、Postgres 等)都为其数据库提供 ODBC 驱动程序。

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

数据库

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

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

SQL Server 数据访问技术

由于 SQL Server (1) 由 Microsoft 制造,(2) Microsoft 数据库平台,因此ODBC 和 OLE DB 都非常适合它。

ODBC

由于所有其他数据库平台都有 ODBC 接口,微软显然不得不为 SQL Server 提供一个接口。除此之外,DAO(Microsoft Access 中的原始默认技术)使用 ODBC 作为与所有外部数据源对话的标准方式。这使得 ODBC 接口成为必要条件。与 SQL Server 2000 一起发布的用于 SQL Server 的版本 6 ODBC 驱动程序仍然存在。已发布更新版本以处理后续版本中出现的新数据类型、连接技术、加密、HA/DR 等。截至 2018 年 9 月 7 日,最新版本是 v13.1“SQL Server 的 ODBC 驱动程序”,于 2018 年 3 月 23 日发布。

数据库

这是微软自己的技术,他们在大约 2002 年至 2005 年期间大力推广该技术,以及其随附的 ADO 层。他们显然希望它将成为首选的数据访问技术。(他们甚至将 ADO 设为在 Access 2002/2003 中访问数据的默认方法。)然而,最终很明显这不会发生,原因有很多,例如:

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

由于这些原因和其他原因,Microsoft 实际上已弃用 OLE DB 作为v11 (SQL Server 2012) 之后的 SQL Server 版本的数据访问技术。在此之前的几年中,他们一直在生产和更新支持 ODBC 和 OLE DB 技术的 SQL Server Native Client。然而,在 2012 年末,他们宣布他们将与 ODBC 保持一致,以便在 SQL Server 中进行本机关系数据访问,并鼓励其他所有人也这样做。他们进一步表示,在 v11/SQL Server 2012 之后的 SQL Server 版本将主动支持 OLE DB!

这一宣布引发了一场抗议风暴。人们不明白为什么 MS 突然弃用了一项他们花了数年时间才让他们承诺的技术。此外,与 SQL Server 密切相关的 MS 编写的应用程序 SSAS/SSRS 和 SSIS 完全或部分依赖于 OLE DB。另一个抱怨是 OLE DB 具有某些理想的特性,似乎无法移植回 ODBC —— 毕竟,OLE DB 有很多优点。

2017 年 10 月,微软让步并正式取消了 OLE DB。他们宣布即将到来的新驱动程序 (MSOLEDBSQL) 将具有 Native Client 11 的现有功能集,还将引入多子网故障转移和 TLS 1.2 支持。该驱动程序于 2018 年 3 月发布。

于 2018-07-13T15:51:37.087 回答
8

• 2011 年 8 月:Microsoft弃用OLE DB(Microsoft 正在与 ODBC 保持一致以实现本机关系数据访问

• 2017 年 10 月:Microsoft取消弃用OLE DB(宣布新版本的 OLE DB Driver for SQL Server

于 2018-05-16T12:42:46.963 回答
6

在非常基本的层面上,这些只是针对不同数据源(即数据库)的不同 API。OLE DB 更新并且可以说更好。

您可以在 Wikipedia 中阅读有关这两个方面的更多信息:

  1. 数据库
  2. ODBC

即,您可以使用 ODBC 驱动程序或 OLE DB 驱动程序连接到同一个数据库。在这些情况下,数据库行为的差异就是您的书所指的。

于 2008-09-19T16:12:33.877 回答
5

两者都是数据提供者(您的代码将用来与数据源对话的 API)。1998 年推出的 Oledb 旨在替代 ODBC(1992 年推出)

于 2012-10-08T13:44:48.607 回答
3

我不确定所有细节,但我的理解是 OLE DB 和 ODBC 是两个 API,可用于连接到各种类型的数据库,而无需处理每个数据库的所有实现特定细节。根据关于 OLE DB 的 Wikipedia 文章,OLE DB 是 Microsoft 对 ODBC 的继承者,并提供了一些您可能无法使用 ODBC 完成的功能,例如将电子表格作为数据库源访问。

于 2008-09-19T16:19:54.063 回答
2

在微软网站上,显示原生OLEDB Provider 直接应用于SQL Server,另外一个OLEDB Provider 叫做OLEDB Provider for ODBC 来访问其他数据库,如Sysbase、DB2 等。OLEDB Provider 下有不同种类的组件。有关更多信息,请参阅MSDN 上的分布式查询

于 2013-07-12T01:06:48.083 回答
0

ODBC 仅适用于关系型数据库,它不能用于非关系型数据库,例如 Ms Excel 文件。Olebd 可以做任何事情的地方。

于 2016-12-19T06:36:06.890 回答
-3

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

于 2016-09-07T04:21:59.170 回答