博客园丁

我是博客园的一丁,我会永不停顿,不停创新。
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数据库访问方法的演进

Posted on 2006-09-22 20:45  Jason.Jiang  阅读(1019)  评论(1编辑  收藏  举报

史前

    那时候每个数据库供应商(其实也没几个)

    都有自己的数据库操作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 模型内的两个托管提供程序和主要对象。