我正在阅读有关pivotcache的MS Excel帮助文章,并想知道它们是什么意思 OLE DB和ODBC源
...您应该使用CommandText 属性而不是SQL属性, 现在主要存在于 与早期版本的兼容性 Microsoft Excel。如果你同时使用两者 属性,CommandText属性 价值优先。
对于 OLE DB源,CommandType 属性描述的值 CommandText属性。
对于 ODBC源,CommandText 财产功能完全像 SQL属性,并设置属性 导致数据刷新......
我非常感谢你的简短答案。
答案 0 :(得分:138)
根据ADO: ActiveX Data Objects, a book by Jason T. Roff, published by O'Reilly Media in 2001(这里的优秀图表),他说的正是莫兹拉所说的。
(直接来自该书的第7页)
- ODBC仅提供对关系数据库的访问
- OLE DB提供以下功能
- 访问数据,无论其格式或位置如何
- 对ODBC数据源和ODBC驱动程序的完全访问权限
因此,OLE DB似乎与基于SQL的数据源THRU ODBC驱动程序层交互。
我不是100%确定这个图像是正确的。我不确定的两个连接是通过ADO C-api的ADO.NET,以及通过ODBC到基于SQL的OLE DB数据源(因为在this diagram中作者没有通过ODBC提供OLE DB的访问权限,我认为这是一个错误。)
答案 1 :(得分:54)
ODBC: - 仅适用于关系数据库(Sql Server,Oracle等)
OLE DB: - 适用于关系数据库和非关系数据库。 (Oracle,Sql-Server,Excel,原始文件等)
答案 2 :(得分:41)
这是我的理解(非权威):
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)。
答案 3 :(得分:14)
ODBC和OLE DB是两种相互竞争的数据访问技术。微软专门针对SQL Server进行了宣传,将它们作为首选的未来发展方向-尽管时间不同。
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是(1)由Microsoft制造的,并且(2) Microsoft数据库平台,因此ODBC和OLE DB都是很合适的。
由于所有其他数据库平台都具有ODBC接口,因此Microsoft显然必须为SQL Server提供一个。除此之外,DAO是Microsoft Access中的原始默认技术,它使用ODBC作为与所有外部数据源进行通信的标准方式。这使ODBC接口成为必要条件。 与SQL Server 2000一起发布的用于SQL Server的版本6 ODBC驱动程序仍然存在。已发布更新版本,以处理后续版本中出现的新数据类型,连接技术,加密,HA / DR等。截至2018年7月7日,最新版本是2018年3月23日发行的v13.1``用于SQL Server的ODBC驱动程序''。
这是Microsoft自己的技术,从2002年至2005年,微软一直在大力推动这项技术及其附带的ADO层。他们显然希望它将成为首选的数据访问技术。 (他们甚至使ADO成为Access 2002/2003中访问数据的默认方法。)但是,最终由于多种原因,这种情况最终不会发生,例如:
由于这些原因and others,Microsoft实际上deprecated OLE DB as a data access technology是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退出并officially un-deprecated OLE DB。他们宣布即将推出新驱动程序(MSOLEDBSQL),该驱动程序将具有Native Client 11的现有功能集,并将引入多子网故障转移和TLS 1.2支持。该驱动程序已于2018年3月发布。
答案 4 :(得分:6)
在非常基础的层面上,这些只是不同数据源(即数据库)的不同API。 OLE DB更新,可以说更好。
您可以在维基百科上阅读更多内容:
答案 5 :(得分:5)
两者都是数据提供者(您的代码将用于与数据源通信的API)。 1998年推出的Oledb旨在取代ODBC(1992年推出)
答案 6 :(得分:3)
我不确定所有细节,但我的理解是OLE DB和ODBC是两个可用于连接到各种类型数据库的API,而无需处理每个数据库的所有实现特定细节。根据{{3}},OLE DB是Microsoft的ODBC继承者,它提供了一些您可能无法使用ODBC的功能,例如访问电子表格作为数据库源。
答案 7 :(得分:2)
在Microsoft网站上,它显示原生OLEDB提供程序直接应用于SQL服务器,另一个OLEDB提供程序称为OLEDB Provider for ODBC以访问其他数据库,例如Sysbase,DB2等。在OLEDB Provider下有不同类型的组件。有关详情,请参阅Distributed Queries on MSDN。
答案 8 :(得分:2)
•2011年8月:Microsoft 弃用 OLE DB(Microsoft is Aligning with ODBC for Native Relational Data Access)
•2017年10月:Microsoft undeprecates OLE DB(Announcing the new release of OLE DB Driver for SQL Server)
答案 9 :(得分:0)
ODBC仅适用于关系数据库,它不能与非关系数据库(如Ms Excel文件)一起使用。奥莱布可以做任何事情。
答案 10 :(得分:-3)
要知道M $为什么会发明OLEDB,你就无法将OLEDB与ODBC进行比较。相反,您应该将OLEDB与DAO,RDO或ADO进行比较。后者很大程度上依赖于SQL。但是,OLEDB依赖于COM。但ODBC已存在多年,因此有一个OLEDB-ODBC桥来解决这个问题。当M $发明OLEDB时,我认为这是一幅大图。