史前
那时候每个数据库供应商(其实也没几个)
都有自己的数据库操作API,
每个应用程序只能使用一个固定的数据库
想换数据库?没门!你要全部重新写
后来
X/OPEN和ISO(好像还有IBM)说
KAO,这么乱,程序员怎么活啊
于是提出了CLI(Call-Level Interface)
每个数据库的CLI(驱动程序)基本上相同,
程序员总算好过点了,可是要换数据库,
你写的程序需要重新编译(或许还要安装)
再后来
于是ODBC来了,它通过动态装载各个数据库的CLI
把函数调用转换成每个数据库的CLI调用
数据库应用程序总算和数据库供应商没什么关系了
再后来
MS提出了OLE,MS还有了自己的数据库
(Access/SQL Server)
MS是老大,这个问题上当然要有自己的看法
要是还只是提供ODBC,那多没面子
所以提出了 OleDb,它通过COM接口调用
OleDb也需要每个数据库提供一个CLI
(不过有了新名词,叫作Provider)
MS 给 Access和SqlServer分别写了一个Provider
不过为了照顾使用ODBC的,也提供了一个ODBC的Provider
这样那些只提供ODBC的数据库也可以通过OleDb访问
不过这样效率就稍微低了(因为要经过两层么)
所以现在有些数据库会提供自己的Provider
再后来
MS说OleDb的接口太复杂了
程序员也就调调QUERY
没必要搞这么复杂吧
于是提出了ADO,ADO 通过在OleDb上面封装
简化了使用方法,程序员在操作数据库上总算是解放了
新世纪终于到来了
MS也发明了.NET,为了适应新世纪新潮流
也提出了 ADO.NET,
这部分的内容我不大清除,请哪位大人继续 :)
不过我感觉是在原ADO上面继续封装吧
图 1.2.数据访问栈
.NET 数据提供程序
ADO.NET 依赖于 .NET 数据提供程序的服务。这些提供程序提供对基础数据源的访问,并且包括四个主要对象(Connection、Command、DataReader 和 DataAdapter)。
目前,ADO.NET 随附了两类提供程序:Bridge 提供程序和 Native 提供程序。通过 Bridge 提供程序(如那些为 OLE DB 和 ODBC 提供的提供程序),可以使用为以前的数据访问技术设计的数据库。Native 提供程序(如 SQL Server 和 Oracle 提供程序)通常能够提供性能方面的改善,部分原因在于少了一个抽象层。
• |
SQL Server .NET 数据提供程序。这是一个用于 Microsoft SQL Server 7.0 和更高版本数据库的提供程序。它被进行了优化以便访问 SQL Server,并且它通过使用 SQL Server 的本机数据传输协议来直接与 SQL Server 进行通讯。 当您连接到 SQL Server 7.0 或 SQL Server 2000 时,请始终使用该提供程序。 |
• |
Oracle .NET 数据提供程序。用于 Oracle 的 .NET 框架数据提供程序通过 Oracle 客户端连接软件支持对 Oracle 数据源的数据访问。该数据提供程序支持 Oracle 客户端软件版本 8.1.7 及更高版本。 |
• |
OLE DB .NET 数据提供程序。这是一个用于 OLE DB 数据源的托管提供程序。它的效率要比 SQL Server .NET 数据提供程序稍微低一些,因为它在与数据库通讯时通过 OLE DB 层进行调用。请注意,该提供程序不支持用于开放式数据库连接 (ODBC) 的 OLE DB 提供程序 MSDASQL。对于 ODBC 数据源,请改为使用 ODBC .NET 数据提供程序(稍后将加以介绍)。有关与 ADO.NET 兼容的 OLE DB 提供程序的列表,请参阅 http://msdn.microsoft.com/library/en-us/cpguidnf/html/cpconadonetproviders.asp。 |
其他目前正处于测试阶段的 .NET 数据提供程序包括:
• |
ODBC .NET 数据提供程序。用于 ODBC 的 .NET 框架数据提供程序使用本机 ODBC 驱动程序管理器 (DM) 来支持借助于 COM 互操作性进行的数据访问。 |
• |
用于从 SQL Server 2000 检索 XML 的托管提供程序。XML for SQL Server Web update 2(目前正处于测试阶段)包含一个托管提供程序,专门用于从 SQL Server 2000 中检索 XML。有关此更新的详细信息,请参阅http://msdn.microsoft.com/library/default.asp?url=/nhp/default.asp?contentid=28001300。 |
有关不同数据提供程序的详细概述,请参阅《.NET 框架开发人员指南》中的“.NET 框架数据提供程序”,网址为:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconadonetproviders.asp。
命名空间组织结构
与各个 .NET 数据提供程序相关联的类型(类、结构、枚举等)位于其各自的命名空间中:
• |
System.Data.SqlClient。包含 SQL Server .NET 数据提供程序类型。 |
• |
System.Data.OracleClient。包含 Oracle .NET 数据提供程序。 |
• |
System.Data.OleDb。包含 OLE DB .NET 数据提供程序类型。 |
• |
System.Data.Odbc。包含 ODBC .NET 数据提供程序类型。 |
• |
System.Data。包含独立于提供程序的类型,如 DataSet 和 DataTable。 |
在各自的关联命名空间内,每个提供程序都提供了对 Connection、Command、DataReader 和 DataAdapter 对象的实现。SqlClient 实现的前缀为“Sql”,而 OleDb 实现的前缀为“OleDb”。例如,Connection 对象的 SqlClient 实现是 SqlConnection,而 OleDb 实现则为 OleDbConnection。同样,DataAdapter 对象的两个实现分别为 SqlDataAdapter 和 OleDbDataAdapter。
在本指南中,所用示例取自 SQL Server 对象模型。尽管此处未加说明,Oracle/OLEDB 和 ODBC 中提供了类似的功能。
一般编程
如果您可能要面向不同的数据源,并且需要将您的代码从一个数据源移至另一个数据源,请考虑编程以支持 System.Data 命名空间中的 IDbConnection、IDbCommand、IDataReader 和 IDbDataAdapter 接口。Connection、Command、DataReader 和 DataAdapter 对象的所有实现都必须支持这些接口。
有关实现 .NET 数据提供程序的详细信息,请参阅 http://msdn.microsoft.com/library/en-us/cpguidnf/html/cpconimplementingnetdataprovider.asp。
还应该注意,如果应用程序使用单对象模型来访问多个数据库,则 OLE DB 和 ODBC 桥接提供程序都可以使用。在此情况下,需要考虑与应用程序的性能需要相比,要求应用程序具有多大的灵活性,以及在何种程度上需要数据库特有的功能。
图 2 阐明了数据访问栈,并说明了 ADO.NET 与其他数据访问技术(包括 ADO 和 OLE DB)之间的关系。它还说明了 ADO.NET 模型内的两个托管提供程序和主要对象。