引用部分指出,“CommandText 属性应该用于替代 SQL 属性,后者仅为了与 Microsoft Excel 的早期版本兼容而存在。如果同时使用这两个属性,则 CommandText 属性的值优先。”
对于 OLE DB 数据源,CommandType 属性描述了 CommandText 属性的值。
对于 ODBC 数据源,CommandText 属性的功能与 SQL 属性完全相同,并且设置该属性会导致数据刷新...
非常感谢您的简短回答。
我不确定这张图片是否正确。 我不确定的两个连接是ADO.NET通过ADO C-api,以及OLE DB通过ODBC到基于SQL的数据源(因为在这张图中,作者没有将OLE DB的访问通过ODBC,我认为这是一个错误)。
System.Data.SqlClient
在托管代码中处理TDS协议,仅使用本地代码处理网络传输的TCP/Named Pipes等。对于没有自己的托管提供程序的数据库,您可以使用System.Data.OleDb
来包装OLE DB或System.Data.Odbc
来包装ODBC,但不建议这样做。 - Mike DimmickODBC:仅适用于关系型数据库 (如 Sql Server、Oracle 等)
OLE DB:既适用于关系型数据库也适用于非关系型数据库。 (Oracle、Sql-Server、Excel、原始文件等)
这是我的理解(非权威性):
ODBC是一个技术无关的开放标准,由大多数软件供应商支持。OLEDB是一种技术特定的Microsoft API,来自COM时代(COM是.NET之前的组件和互操作技术)。
在某个时刻,各种数据源供应商(例如Oracle等),希望与Microsoft数据消费者兼容,为其产品开发了OLEDB提供程序,但在大多数情况下,OLEDB仍然是Microsoft的专有标准。现在,大多数Microsoft数据源都允许使用ODBC和OLEDB访问,主要是为了与传统的ODBC数据消费者兼容。此外,还存在OLEDB提供程序(包装器)用于ODBC,可以让人们通过OLEDB访问ODBC数据源。
就功能而言,OLEDB比ODBC更加丰富,但存在“一环控制一切”综合症(过于通用、过于复杂、没有明确意见)。
在非Microsoft的世界中,基于ODBC的数据提供程序和客户端被广泛使用,并且不会消失。
在Microsoft内部,OLEDB正在逐步淘汰,取而代之的是基于该数据源的本机.NET API(例如MS SQL Server的TDS)。
ODBC和OLE DB是两种竞争的数据访问技术。具体涉及到SQL Server,Microsoft已经在不同的时间推广了它们作为他们首选的未来方向。
ODBC是用于访问表格数据的行业标准接口。它主要是为数据库开发的,并将数据呈现为记录的集合,每个记录都分成一组字段。每个字段都有自己的数据类型,适合于其包含的数据类型。每个数据库供应商(Microsoft、Oracle、Postgres等)都会提供其数据库的ODBC驱动程序。
还有一些针对对象的ODBC驱动程序,虽然它们不是数据库表,但它们足够相似,以便以相同的方式访问数据。例如电子表格、CSV文件和列报告。
OLE DB是Microsoft用于访问数据的一项技术。与ODBC不同,它涵盖了类似于表格的和非表格的数据,如电子邮件消息、网页、Word文档和文件目录。但是,它是面向过程而不是面向对象的,被认为是一个相当困难的接口,用它来开发数据源访问。为了克服这一点,ADO被设计成OLE DB上面的面向对象层,并提供了一种更简单、更高级的方法来处理它,虽然仍然非常强大。ADO的优点在于,您可以使用它来操作特定于给定类型数据源的属性,就像您可以使用它访问适用于所有数据源类型的属性一样。您不受限于某些不令人满意的最低公共因数。
虽然所有数据库都有ODBC驱动程序,但并不是所有数据库都有OLE DB驱动程序。但是,OLE和ODBC之间有一个接口可用于以类似OLE DB的方式访问它们。这个接口称为MSDASQL(Microsoft OLE DB提供程序对于ODBC)。
由于SQL Server是(1)由Microsoft制作,并且(2)是Microsoft数据库平台,因此ODBC和OLE DB都非常适合它。
由于所有其他数据库平台都有ODBC接口,Microsoft显然必须为SQL Server提供一个接口。除此之外,DAO,Microsoft Access中的原始默认技术,使用ODBC作为与所有外部数据源交互的标准方式。这使得ODBC接口成为必需品。 SQL Server 2000随附的版本6 ODBC驱动程序仍然存在。已发布更新版本以处理随后发布的新数据类型、连接技术、加密、HA/DR等。截至2018年9月7日,最新版本是于2018年3月23日发布的v13.1“ODBC Driver for SQL Server”。
这是Microsoft自己的技术,他们从2002年到2005年一直在积极推广它,同时推出了其附带的ADO层。他们显然希望它成为首选的数据访问技术。(他们甚至将ADO作为Access 2002/2003中访问数据的默认方法。)然而,由于许多原因,例如:
出于这些原因和其他原因, 微软实际上已将OLE DB作为数据访问技术进行了弃用,用于SQL Server v11(SQL Server 2012)之后的版本。在此之前的几年中,他们一直在生产和更新SQL Server Native Client,该客户端支持ODBC和OLE DB技术。然而,2012年底,他们宣布将与ODBC对齐,以便在SQL Server中进行本地关系数据访问,并鼓励其他人也这样做。他们进一步声明,SQL Server v11 / SQL Server 2012之后的版本将积极地不支持OLE DB!
这一声明引起了一场抗议风暴。人们不知道为什么微软突然弃用了一项他们花费多年时间才让人们承诺的技术。此外,SSAS/SSRS和SSIS是与SQL Server密切相关的由微软编写的应用程序,它们完全或部分依赖于OLE DB。还有一个抱怨是,OLE DB具有某些理想特性,似乎不可能将其移植回ODBC - 毕竟,OLE DB有很多优点。• 2011年8月: 微软弃用OLE DB (微软将与ODBC对齐以进行本地关系数据访问)
• 2017年10月: 微软取消弃用OLE DB (宣布发布新版OLE DB驱动程序,适用于SQL Server)
两者都是数据提供程序(你的代码用来与数据源通信的API)。Oledb是在1998年推出的,旨在代替在1992年推出的ODBC。
在微软网站上,显示本机OLEDB提供程序直接应用于SQL服务器,而另一个名为ODBC的OLEDB提供程序用于访问其他数据库,例如Sysbase、DB2等。OLEDB提供程序下有不同种类的组件。更多信息请参见MSDN上的分布式查询。
ODBC仅适用于关系型数据库,无法与非关系型数据库(如Ms Excel文件)配合使用。而Olebd可以做任何事情。