2023年11月30日发(作者:)

ADO简介

简介

ActiveXDataObjects(ADO)是微软最新的数据访问技术。它被设计用来同新的数据访问层

OLEDBProvider一起协同工作,以提供通用数据访问(UniversalDataAccess)。OLEDB

是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库以及电

子邮件系统及自定义的商业对象。

ADO向我们提供了一个熟悉的,高层的对OLEDBAutomation封装接口。对那些熟悉

RDO的程序员来说,你可以把OLEDB比作是ODBC驱动程序。如同RDO对象是ODBC

驱动程序接口一样,ADO对象是OLEDB的接口;如同不同的数据库系统需要它们自己的

ODBC驱动程序一样,不同的数据源要求它们自己的OLEDB提供者(OLEDBprovider)。

目前,虽然OLEDB提供者比较少,但微软正积极推广该技术,并打算用OLEDB取代ODBC

ADOVB程序员提供了很多好处。包括易于使用,熟悉的界面,高速度以及较低的内存

占用(已实现ADO2.0需要占用342K内存,RDO368K

略小,大约是DAO3.5所占内存的60%)。同传统的数据对象层次(DAO

RDO)不同,ADO可以独立创建。因此你可以只创建一个"Connection"对象,但是可以

有多个,独立的"Recordset"对象来使用它。ADO针对客户/服务器以及WEB应用程序作

了优化。

本文的目的是带你进入ADO广阔的世界并开始使用它。

在哪里能得到ADO?

目前ADO1.5版已经可以从微软网站免费下载。到目前为止,微软网站仍是你获取有关ADO

最新信息的最佳场所。ADO1.5是作为OLEDBSDK的一部分提供的。你可以从下面这个网

址下载:

/data/oledb/

在下载之前请先确认OLEDBSDK提供的各项特性。下载文件大约有15M,如果完全安装

的话要占用80M的硬盘空间。如果你只对ADO感举趣,就选择最小安装,这样只会占用

15M的硬盘空间。关于ADO的网页在:

/data/ado/.

在这里你可以找到许多关于ADO的示例代码和文章,尤其是在"Workshop"系列的文章中。

你也可以从本站下载ADO2.5的帮助文件。

尽管OLEDBSDK提供自己的ADO帮助文件,你会发现ADO1.0的帮助文件更易于使用。

同时它还向你提供ADO对象模型的图示

ADO是如何组织起来的?

以前的对象模型,DAORDO是层次型的。也就是说一个较低的数据对象如Recordset

是几个较高层次的对象,如EnvironmentQueryDef,的子对象。在创建一个QueryDef

对象的实例之前,你不能创建DAORecordset对象的实例。ADO却不同,它定义了一组

平面型顶级对象.

最重要的三个ADO对象是Connection,RecordsetCommand.本文将主要介绍

ConnectionRecordset这两个对象。每个Connection的属性定义了与数据源的连接。

Recordset对象接收来自数据源的数据。Recordset可以与Connection一起起使用,先建

立一个连接,然后获取数据。尽管如此,Recordset也可以被单独创建,其Connection

数可以在Open属性定义。

如何使用ADO?

一旦安装了ADO,在VB的工程->引用对话框中你就可以看到象下图所示的东西了:

选择"ActiveXDataObjects1.5Library"(ADODB).在其下的"ADORecordset1.5Library"是一个

客户端的版本(ADOR),它定义了有聚的数据访问对象。ADOR对于客户端的数据访问来说是

足够的了,因为你不需要Connection对象来建立与远程数据源的联系。

如果你想要访问更多的外部数据源,你需要安装这些外部数据源自己的OLEDBProvider

就象你需要为新的数据库系统安装新的ODBC驱动程序一样。如果该外部数据源没有自己

OLEDBProvider,你就得使用OLEDBSDK来自己为这个外部数据源创建一个

OLEDBProvider了。这已不是本文讨论的范围了。

示例

下面的示例代码以Northwinds数据库作为远程数据源,然后用ADO来访问它。首先在控

制面板中打开“32位数据源,单击添加按钮。在弹出的对话框中选择

"MicrosoftAccessDriver(*.mdb)"作为数据源驱动程序。

然后按下图所示,在对话框中填写下面的内容

选择数据库Northwinds所在路径。单击完成,退出ODBC设备管理器。

启动一个新的VB工程,在窗体的Load事件中输入下面的代码:

PrivateSubForm_Load()

tion

Setcn=tion

'SetConnectionproperties

tionString="DSN=RDCNwind;UID=;PWD=;"

tionTimeout=30

=adStateOpenThen_

MsgBox"ConnectiontoNorthWindSuccessful!"

EndSub

F5运行程序,看看,一个消息框弹出来告诉你连接成功了。请注意,这里我特别注明了

tion,而不是tion这样做是为了将二者区分开(如果你引

用了ADODBADOR的话,这样做很有必要)。连接字符串看上去同RDO的连接字符

串差不多。事实上,二者确实差不多。

如果我们要访问一个SQLserver数据库,你的Connection代码看上去应象下面所示:

'设置连接属性er="MSDASQL"

tionString="driver={SQLServer};"&"server=prod1;uid=bg;pwd=;database=main

"

"Provider"属性指向SQLServerOLEDBProvider.

回到我们的示例程序,让我们创建一个Recordset对象来访问“Orders”表,并从该表的

"ShipCountry"字段中产生头十个不重复的国家名。修改窗体Load事件中的代码,让它看上

去象下面这样。

PrivateSubForm_Load()

不幸的是,目前这个Recrodset对象是只读的和forwardcursor。如果你想要获取更多的功

能,你需要创建一个独立的Recordset对象,该对象拥有自己的Connection属性,就象下

面的代码所示:

PrivateSubForm_Load()

set

DimsSQLAsString

DimsOutAsString

DimCountAsInteger

Setrs=set

sSQL="untryFROMOrders"

QL,"DSN=RDCNwind;UID=;PWD=;",adOpenDynamic

'ReportRecordsetConnectioninformation

Connection,,"ConnectionInfo"

'Enumeratetherecordset

sOut=""

ForCount=1To10

sOut=sOut&rs("ShipCountry")&vbCrLf

xt

NextCount

总结

本文仅向你介绍了ADO强大的功能的冰山一角。微软承诺,在将来ADO将会取代DAO

RDO所以现在你应该考虑如何将你的数据访问代码投向ADO的怀抱。这种转变不会很痛

苦,因为ADO的语法同现有的语法差不多。也许微软或第三方会在将来开发出转换向导来

简化这一转换过程。从现在起,你就应开发纯ADO代码的程序。你也可以继续使用DAO

RDO代码来开发你的程序,但落伍的感觉总是不好的。->