ODBC和OLE DB是两种竞争的数据访问技术。尤其是在SQL Server方面,Microsoft已将二者都作为首选的未来发展方向进行了推广-尽管时间不同。
ODBC
ODBC是用于访问类表数据的行业范围内的标准接口。它最初是为数据库开发的,并以记录的集合形式显示数据,每个记录都分组为一个字段集合。每个字段都有适合其包含的数据类型的自己的数据类型。每个数据库供应商(Microsoft,Oracle,Postgres等)都为其数据库提供了ODBC驱动程序。
还有一些对象的ODBC驱动程序,尽管它们不是数据库表,但它们非常相似,因此以相同的方式访问数据很有用。例如电子表格,CSV文件和列式报告。
OLE DB
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年7月7日,最新版本为v13.1``SQL Server的ODBC驱动程序'',于2018年3月23日发行。
OLE DB
这是Microsoft自己的技术,大约在2002年至2005年间,微软一直在大力推动这项技术以及其附带的ADO层。他们显然希望它将成为首选的数据访问技术。(他们甚至使ADO成为Access 2002/2003中访问数据的默认方法。)但是,最终由于多种原因,这种情况最终不会发生,例如:
- 全世界都不会转换为Microsoft技术,而不再是ODBC。
- DAO / ODBC比ADO / OLE DB快,并且也完全集成到MS Access中,因此不会自然死亡。
- 微软正在开发的新技术,特别是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突然弃用了他们花了多年才致力于的一项技术。此外,SSAS / SSRS和SSIS是由MS编写的与SQL Server紧密相关的应用程序,完全或部分依赖于OLE DB。另一个抱怨是OLE DB具有某些理想的功能,似乎无法移植回ODBC –毕竟,OLE DB有很多优点。
2017年10月,Microsoft撤销了OLE DB并正式弃用了OLE DB。他们宣布即将推出新驱动程序(MSOLEDBSQL),该驱动程序将具有Native Client 11的现有功能集,并将引入多子网故障转移和TLS 1.2支持。该驱动程序于2018年3月发布。