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

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

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

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

对于ODBC源 ,CommandText属性的function与SQL属性完全相同,并且设置属性会导致数据刷新…

我真的很感激你的简短答案。

根据ADO:ActiveX Data Objects ,O'Reilly Media于2001年出版的Jason T. Roff的一本书 (这里出色的图),他正是说MOZILLA所说的。

(直接从该书的第7页)

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

所以看起来,OLE DB与基于SQL的数据源通过ODBC驱动程序层进行交互。

替代文字

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

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

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

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

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

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

就function而言,OLEDB实质上比ODBC更丰富,但却遭受了单一戒指到全部的综合征(过度泛化,过度复杂化,非自发性)的困扰。

在非微软世界中,基于ODBC的数据提供者和客户端被广泛使用,而且不会去任何地方。

在微软的泡沫内部,OLEDB正逐渐被淘汰,而不论本地数据源的传输层是什么(例如MS SQL Server的TDS),都build立在本地.NET API之上。

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

您可以在维基百科上阅读更多内容:

  1. OLE DB
  2. ODBC

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

两者都是数据提供者(您的代码将用于与数据源通信的API)。 1998年推出的Oledb是为了取代ODBC(1992年推出)

我不确定所有的细节,但我的理解是,OLE DB和ODBC是两个API,可以连接到各种types的数据库,而不必处理每个实现的具体细节。 根据维基百科关于OLE DB的文章 ,OLE DB是Microsoft的ODBC的inheritance者,并提供了一些您可能无法使用ODBC的function,例如将电子表格作为数据库源访问。

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

ODBC仅适用于关系数据库,它不能与非关系数据库(如Ms Excel文件)一起使用。 Olebd可以做任何事情。

要知道为什么M $事实OLEDB,你不能比较OLEDB和ODBC。 相反,您应该将OLEDB与DAO,RDO或ADO进行比较。 后者在很大程度上依赖于SQL。 但是,OLEDB依赖于COM。 但是ODBC已经有很多年了,所以有一个OLEDB-ODBC桥梁来弥补这一点。 当M $发明OLEDB时,我认为有一个很大的图像。