OLE DB和ODBC数据源之间有什么区别?

时间:2020-03-06 14:26:39  来源:igfitidea点击:

我正在阅读有关数据透视缓存的MS Excel帮助文章,想知道它们对OLE DB和ODBC源的含义

...You should use the CommandText
  property instead of the SQL property,
  which now exists primarily for
  compatibility with earlier versions of
  Microsoft Excel. If you use both
  properties, the CommandText property’s
  value takes precedence.
  
  For OLE DB sources, the CommandType
  property describes the value of the
  CommandText property.
  
  For ODBC sources, the CommandText
  property functions exactly like the
  SQL property, and setting the property
  causes the data to be refreshed...

非常感谢简短回答。

解决方案

从根本上讲,这些只是用于不同数据源(即数据库)的不同API。 OLE DB是较新的并且可以说是更好的。

我们可以在Wikipedia上同时阅读更多内容:

  • OLE DB
  • ODBC

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

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

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

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

根据ADO:ActiveX Data Objects(Jason T. Roff的书,由O'Reilly Media于2001年出版)的介绍(此处是出色的图表),他准确地说出了MOZILLA所说的话。

(直接来自该书的第7页)

ODBC provides access only to relational databases
  OLE DB provides the following features
  
  
  Access to data regardless of its format or location
  Full access to ODBC data sources and ODBC drivers

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

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

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

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

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

就功能而言,OLEDB比ODBC丰富得多,但饱受一环到规则的所有综合症的困扰(过于通用,过于复杂,未接受过修饰)。

在非Microsoft的世界中,基于ODBC的数据提供程序和客户端得到了广泛使用,并且无处不在。

在Microsoft泡沫内部,OLEDB正在逐步淘汰,而倾向于在该数据源的本机传输层(例如MS SQL Server的TDS)之上构建本机.NET API。