当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《OLEDB和ODBC数据源之间有什么区别?》经验,为你挑选了6个好方法。

我正在阅读有关pivotcache的MS Excel帮助文章,并想知道OLE DB和ODBC源的含义

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

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

对于ODBC源,CommandText属性的功能与SQL属性完全相同,设置属性会导致数据刷新...

我非常感谢你的简短回答.



1> bobobobo..:

ADO报道:ActiveX数据对象是由Jason T. Roff出版的一本书,由O'Reilly Media于2001年出版(优秀的图表),他正是MOZILLA所说的.

(直接来自那本书的第7页)

ODBC仅提供对关系数据库的访问

OLE DB提供以下功能

无论格式或位置如何,都可以访问数据

完全访问ODBC数据源和ODBC驱动程序

因此,OLE DB似乎与基于SQL的数据源THRU ODBC驱动程序层交互.

替代文字

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


实际上有时OLE DB包装ODBC驱动程序,有时它不包含.[见这里](http://stackoverflow.com/a/271517)
如果OLE DB使用ODBC连接到SQL数据源,那么OLE DB必须支持OLE DB支持的任何SQL数据源,但事实并非如此 - 原始图必须是正确的(而不是这一个) ).
此条目http://jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db/表示对于SQL DS,OLEDB通过ODBC.
ADO.NET不包装ADO.ADO.NET类通常直接与其数据库或数据库网络库通信,而不是通过任何其他提供者/驱动程序层.例如,`System.Data.SqlClient`处理托管代码中的TDS协议,仅使用本机代码来处理网络上的TCP /命名管道/ etc传输.对于没有自己的托管提供程序的数据库,可以使用`System.Data.OleDb`来包装OLE DB或`System.Data.Odbc`来包装ODBC,但不建议这样做.

2> MOZILLA..:

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

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


大声笑,哟伙计们在2009年或2016年谈论ODBC ......?它是正确的.
错了,两者都可以根据驱动程序与非关系型商店交谈.

3> zvolkov..:

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

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).



4> marktwo..:

ODBC和OLE DB是两种竞争数据访问技术.特别是关于SQL Server,微软已将它们作为首选未来方向推广 - 尽管在不同的时间.

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)由微软,和(2)微软数据库平台,ODBC和OLE DB是一个天生适合它.

ODBC

由于所有其他数据库平台都有ODBC接口,因此Microsoft显然必须为SQL Server提供一个.除此之外,DAO(Microsoft Access中的原始默认技术)使用ODBC作为与所有外部数据源通信的标准方式.这使得ODBC接口成为必要条件.与SQL Server 2000一起发布的SQL Server版本6 ODBC驱动程序仍然存在.已发布更新版本以处理随后发布的新数据类型,连接技术,加密,HA/DR等.截至09/07/2018,最新版本是v13.1"用于SQL Server的ODBC驱动程序",于23/03/2018发布.

OLE DB

这是微软自己的技术,它从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版本的数据访问技术(SQL Server 2012).在此之前的几年,他们一直在制作和更新SQL Server Native Client,它支持ODBC和OLE DB技术.然而,在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月,微软妥协并且正式弃用了OLE DB.他们宣布即将推出新驱动程序(MSOLEDBSQL),该驱动程序将具有Native Client 11的现有功能集,并且还将引入多子网故障转移和TLS 1.2支持.该驱动程序于2018年3月发布.



5> Ilya Kocheto..:

在非常基础的层面上,这些只是针对不同数据源(即数据库)的不同API.OLE DB更新,可以说更好.

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

    OLE DB

    ODBC

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


与许多与IT相关的主题一样,事情几乎已经完全循环.SQL 2012是支持OLE DB Native提供程序的最后一个版本,应用程序现在应该切换回ODBC.喜欢SQL Server的"旧时代"http://technet.microsoft.com/en-us/library/hh967418.aspx
"OLE DB更新,可以说更好",这在2008年可能是真实的,但在2014年则不然.

6> Arcturus..:

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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有