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 中访问数据的默认方法。)然而,最终很明显这不会发生,原因有很多,例如:
- 世界不会转向微软技术并远离 ODBC。
- DAO/ODBC 比 ADO/OLE DB 更快,并且完全集成到 MS Access 中,因此不会自然死亡;
- 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 月发布。