ado,odbc,ole等数据库连接技术小析

来源:互联网 发布:1元云购源码下载 编辑:程序博客网 时间:2024/06/06 16:51

  ado,odbc,ole等数据库连接技术小析

  最近初次接触数据库连接技术。一堆名词,ado,odbc,ole……很是让我纠结。看了几本书也没说清楚他们的本质和联系。

  我对他们的初步理解是:

  在各个编程平台,连接数据库的几种技术。每种技术各有各的特点,有的速度快,有的支持范围广。通过这些技术,可以让界面和后台数据库想连接。

  可是具体的细节还是很模糊,特别在csdn找了几篇文章,汇总一下吧:

 

———————————————————————————————————————————————

ADO,OLEDB,ODBC,DAO,RDO的区别

ODBC(Open   Database   Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows   Open   Services   Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。---出现的最早,但不总是万能。

DAO:数据访问对象是用来显露了Microsoft   Jet数据库引擎(最早是给Microsoft   Access   所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到   Access   表。DAO   最适用于单系统应用程序或在小范围本地分布使用。其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式---应用的专一性

RDO(Remote   Data   Objects)远程数据对象是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DAO   style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多SQL   Server、Oracle   以及其他大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。---无疑是在odbc基础上的

OLE   DB   是   Microsoft   的一个战略性系统级编程接口,用于管理整个组织内的数据。OLE   DB   是建立在   ODBC   功能之上的一个开放规范。ODBC   是为访问关系型数据库而专门开发的,OLE   DB   则用于访问关系型和非关系型信息源,例如主机   ISAM/VSAM   和层次数据库,电子邮件和文件系统存储,文本、图形和地理数据以及自定义业务对象。  
OLE   DB   定义了一组   COM   接口,对各种数据库管理系统服务进行封装,并允许创建软件组件,实现这些服务。OLE   DB   组件包括数据提供程序(包含和表现数据)、数据使用者(使用数据)和服务组件(处理和传送数据,例如,查询处理器和游标引擎)。  
OLE   DB   接口有助于平滑地集成组件,这样,OLE   DB   组件厂商就可以快速地向市场提供高质量   OLE   DB   组件。此外,OLE   DB   包含了一个连接   ODBC   的“桥梁”,对现用的各种   ODBC   关系型数据库驱动程序提供一贯的支持。---号称取代odbc,但也兼容odbc

ADO(ActiveX   Data   Object)是DAO/RDO的后继产物。ADO   2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO "扩展 "了DAO和   RDO   所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。   作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流。   ADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE   DB三种方式。后面的例程将详细讲解这三种方式的具体访问实现。---可以说是对odbc,oledb这些系统级的编程接口的汇接,并对DAO,RDO这些应用级的编程接口的升级吧。

——————————————————————————————————————————————————

OLEDB的性能比较  

有许多种办法可以连上一个数据库.   你可以用System   DSN,   DSN-less连接或是本地的OLEDB   provider.   OLEDB?   这是什么什么玩艺儿?   也许你们中的许多人以前没有听说过.   要回答这个问题,我们先得回顾一下数据库连接的历史.  

早期的数据库连接是非常困难的.   每个数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层API有深刻的了解.   因此,能处理各种各样数据库的通用的API就应运而生了.   也就是现在的ODBC(Open   Database   Connectivity),   ODBC是人们在创建通用API的早期产物.   有许多种数据库遵从了这种标准,被称为ODBC兼容的数据库.  
ODBC兼容的数据库包括Access,   MS-SQL   Server,   Oracle,   Informix等.  

但ODBC并不是完美无缺的,它仍然含有大量的低级的调用,开发ODBC应用程序仍较困难.   开发者不得不将大量的精力花在底层的数据库通信中,而不能专注于他们所要处理的数据.   后来微软提出了一个解决方案:   DAO(Data   Access   Objects).   DAO的代码看起来象这样:  

objItem.AddNew  
objItem.Name   =   "Chair "  
objItem.Price   =   10  
objItem.Update  

你也许看过DAO的代码.   后来DAO演变为RDO(Remote   Data   Objects,   为分布式数据库体系设计),   再后来是ADO.   尽管它们都有各自的不足之处.   根据微软的说法, "ODBC提供了本地SQL数据的存取,DAO提供了高级的数据对象 ".   DAO和RDO都需要数据以SQL(Structured   Query   Language)的格式存储.   针对这些缺陷,微软提出了OLEDB,一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).  

OLEDB位于ODBC层与应用程序之间.   在你的ASP页面里,ADO是位于OLEDB之上的 "应用程序 ".   你的ADO调用先被送到OLEDB,然后再交由ODBC处理.   你可以直接连接到OLEDB层,如果你这么做了,你将看到服务器端游标(recordset的缺省的游标,也是最常用的游标)性能的提升.   那我们该如何直接连接到OLEDB呢?  

要想直接连到OLEDB层,你必须改变你的connection对象连接字符串.   先用老办法创建一个connectiong对象:  

Dim   objConn  
Set   objConn   =   Server.CreateObject( "ADODB.Connection ")  

接下去,我们不用常规的类似DSN=pubs   or   DRIVER={MS   SQL-  
Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine的连接字符串,而采用下面的连接字符串:  

objConn.ConnectionString   =   "Provider=ProviderName;   Data  
Source=DatabaseSource;   Initial   Catalog=DatabaseName;   User   ID=UserID;  
Password=Password "  

对于SQL:  
ProviderName   =   SQLOLEDB  
Data   Source   =   Server   Name  
Initial   Catalog   =   Database   Name  

对于Access:  
ProviderName   =   Microsoft.Jet.OLEDB.3.51  
Data   Source   =   Full   path   to   .MDB   file  

下面让我们来看两个例子,一个是针对Access的,还有一个是针对SQL的.   如果你的连接SQL的DSN-less连接串是这样的:  

DRIVER={MS   SQL-Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine  

那么直接连接到OLEDB的连接字符串应该是这样的:  

Provider=SQLOLEDB;   Data   Source=myMachine;   Initial   Catalog=pubs;   User  
ID=sa;   Password=  

让我们来看看Access,如果你的Access的连接字符串是:  

DRIVER={Microsoft   Access   Driver   (*.mdb)};  
DBQ=c:/inetpub/wwwroot/users.mdb  

那么直接连接到OLEDB的连接字符串应该是这样的:  

Provider=Microsoft.Jet.OLEDB.3.51;   Data  
Source=c:/inetpub/wwwroot/users.mdb  

就是这么简单,挺棒的吧?  

这很重要吗?  
现在你也许对为什么要学习这种新的数据库连接方法感到有些儿迷惑,为什么不走标准的DSN-less/System   DSN路子呢?   让我来告诉你为什么.   据Wrox出的ADO   2.0  
Programmer 's   Reference一书中的测试,用OLEDB连接而不是DSN或DSN-less的连接会得到的性能提升如下:  

性能比较  
SQL   Access  
 OLEDB   DSN OLEDB   DSN  
Connection   Times:   18   82   Connection   Times:   62   99  
Iterating   through   1,000   Records   Times:   2900   5400   Iterating   through  
1,000   Records   Times:   100   950  
————————————————————————————————————————————————————

 

dao   数据连接对象
rdo   远程的
ado   active   X数据库控件
odbc   数据源
————————————————————————————————————————————————————
odbc   支持的平台最广泛
DAO   用的是微软自己的access,不用其它数据库软件支持
ADO   是基于oledb的连接技术,优点是速度快,使用方便,省略了很多细节。
————————————————————————————————————————————————————
ADO和DAO的主要区别是:
    DAO   的设计思想使用一种接口来访问多种类型的数据。它在处理时使用Microsoft.Jet接口的ODBC数据源。DAO.Jet数据库服务的最独特的方面就是它有自己的查询引擎。但它的最大弱点是由于查询服务运行于本地机上,这就意味着在处理任何远程数据请求之前,必须把所有的数据都传输到本地工作站上,但在低速连接中调用大量数据时这是一个缺点。另外的一个缺点是它不“认识”Internet,DAO.Jet   服务是为单机和局域网(LAN)开发的。
    ADO和DAO的最大区别是ADO使用OLEDB接口而非ODBC作为底层数据供应者的。依靠OLEDB,ADO也能够支持对非SQL数据存储的纪录集访问,如Email和网络目录服务。OLEDB提供了比ODBC更多的灵活性和易用性。OLEDB服务的内部设计使得它能存取标准SQL类型的数据那样容易的访问非SQL数据存储。OLEDB的一个关键特性是它可以提供对描述性数据存储的处理。通过提供某种方法来描述数据存储方式,OLEDB可以对以任何格式存储的数据和以任何方法执行的查询提供访问途径。由于OLEDB并不要求所有数据存储都以表格、行和列的形式出现。所以与ODBC相比,它适用于更多的数据存储类型。
——————————————————————————————————————————————————
ActiveX数据对象(ADO):是微软提供的面向对象的接口,与OLE   DB类似,但接口更简单,具有更广泛的特征数组和更高程度的灵活性。ADO基于COM,提供编程语言可利用的对象,除了面向VC++,还提供面向其他各种开发工具的应用,如VB,VJ等。ADO在服务器应用方面非常有用,特别是对于动态服务器页面ASP(Active   Server   Page)。
————————————————————————————————————————————
.odbc,oledb,ado,adox的关系:
    odbc:     曾经的数据库通信标准
    oledb:   在一切对象化的趋势下,ms打算用它取代odbc.
                  oledb分两种:直接的oledb和面向odbc的oledb,后者架构在odbc上,这样没有自己的oledb提供者的数据库也可以使用oledb的特点了。
    ado:       其实只是一个应用程序层次的界面,它用oledb来与数据库通信。
    adox:     对ado的安全性,维护性(如:创建一个数据库)进行了扩展。

2.用odbc连接数据库:
odbc中提供三种dsn,它们的区别很简单:用户dsn只能用于本用户。系统dsn和文件dsn的区别只在于连接信息的存放位置不同:系统dsn存放在odbc储存区里,而文件dsn则放在一个文本文件中。
    它们的创建方法就不说了。
    在asp中使用它们时,写法如下:
    A.sql   server:
          用系统dsn:   connstr= "DSN=dsnname;   UID=xx;   PWD=xxx;DATABASE=dbname "  
          用文件dsn:   connstr= "FILEDSN=xx;     UID=xx;   PWD=xxx;DATABASE=dbname "  
          还可以用连接字符串(从而不用再建立dsn):
              connstr= "DRIVER={SQL   SERVER};SERVER=servername;UID=xx;PWD=xxx "
    B.access:
          用系统dsn:   connstr= "DSN=dsnname "
                    (或者为:connstr= "DSN=dsnname;UID=xx;PWD=xxx ")
          用文件dsn:   connstr= "FILEDSN=xx "  
          还可以用连接字符串(从而不用再建立dsn):
              connstr= "DRIVER={Microsoft   Access   Driver};DBQ=d:/abc/abc.mdb "

3.用oledb连接数据库:
      A.sql   server:
          connstr= "PROVIDER=SQLOLEDB;
                  DATA   SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname "  
      B.access:
          connstr= "PROVICER=MICROSOFT.JET.OLEDB.4.0;
                  DATA   SOURCE=c:/abc/abc.mdb "

4.使用UDL文件:
    UDL文件是用来存放数据库连接信息的一个文本文件,有点象文件DSN,不过UDL是针对OLEDB(直接的和面向ODBC的)的。
    UDL的创建方法:
        右击桌面或资源管理器-》新建-》microsoft数据连接
        其中的设置工作应该比较清楚了。
    UDL的用法:
        connstr= "file   name=e:/abc/abc.udl "
原创粉丝点击