日期:2010-06-01  浏览次数:21472 次

  ADO(ActiveXDataObjects)是Microsoft提供和建议使用的新型的数据访问接口,具体实现为Automation。这样,程序员可以在各种支持Automation的开发环境下方便地访问ADO对象,如VisualBasic、VisualC++、VisualJ++及Delphi等。ADO被实现为OLEDB之上的一个薄层,这使得ADO可以有更快的访问速度,更易使用,同时更节省资源。值得注意的是,对于VisualStudio6.0的用户而言,现在提供的ADO2.0要比VisualStudio5.0时代的ADO1.5更加完整。这意味着程序员可以更为广泛地使用ADO接口,甚至在所有的基于Windows平台的数据访问中使用它。比如对RDS(前身是ADC)的支持,可以方便的构建高效的Web应用。

  一、对ADO对象的主要操作

  对ADO对象的主要操作,同DAO、RDO库的实现基本相同。主要包括6个方面:

  1.连接到数据源。这是可选的、通常涉及ADO的Connection对象。

  2.向数据源提交命令。通常涉及ADO的Command对象。在查询中可以与参数对象(Parameter)协同使用。

  3.执行命令,比如一个SELECT脚本。

  4.如果提交的命令有结果返回,可以通过ADO的Recordset对象对结果进行操作,数据存储在缓存中。

  5.如果合适,可将缓存中被修改的数据更新到物理的存储上。

  6.提供错误检测。通常涉及ADO的Error对象。

  以程序员的视角来看,ADO、DAO和RDO三者的对象名称不很相同。但使用ADO对象要比DAO和RDO简单得多。最主要的一点在于,程序员不用像在使用DAO和RDO那样要从对象模型的顶层开始一步步的创建子对象。因此,ADO提供了一种更灵活的编程方式。

  二、ADO中主要对象的功能

  Connection对象,表示了一个到数据源的会话。使用Connection对象的成员,可以使用相应的属性打开到数据源的连接,设置游标的位置,设置默认的当前数据库,设置将使用的OLEDBProvider,直接提交SQL脚本等。值得注意的是,在提交SQL脚本的任务时,不用创建一个Command对象,就可完成查询。另外,对Connection对象的创建是同其他对象无关的。Command对象,可被用于查询数据库并返回结果在Recordset对象中。也可以进行批操作和操纵数据库的结构,当然,这需要使用的OLEDBProvider提供相应的支持。此外,可以将一个激活的Connection对象绑定到Command对象的ActiveConnection属性,这使得多个Command对象实例可以共用一个Connection对象。

  Recordset对象,用来封装查询的结果,可称为结果集。

  Field对象,用来表达一行结果中各子段的类型和值。

  Error对象,用来检测和判断在数据库操作中出现的错误,比如连接失败。 在ADO中,许多对象名后多了一个"s",比如Error->Errors,Field->Fields等等。添加"s"意味着是相应对象的Collection(集合)对象,比如Errors是Error对象的Collection对象。Collection有点像数组(Array),但不同的是,Collection可以以不同类型的数据或对象作为自己的元素,而数组中的各元素通常都是相同类型的。所以,在看到一个对象名最后是"s",通常表明这是一个Collection对象,比如Errors中的各元素是由Error对象的实例组成的。

  三、简单的例子

  现在,我们在经过了前面的铺垫后,终于可以进入写代码的过程了。下面是一系列在VisualBasic中编写的代码片段,其中对ADO的操纵完全用代码来实现。在开始前,请不熟悉ActiveXAutomation的读者牢记,我们正在使用的,是被实现为ActiveXAutomation的ADO组件。1.打开Connect.ion对象

  打开一个到数据源的连接,即Connection对象的VB代码如下:

Dim cn As ADODB.Connection
’声明ADODB.Connection对象变量
Dim strCN As String
’声明存放连接串的字符串变量
Set cn= New Connection
’实例化Connection对象
’生成连接串(ConnectionString)
strCN="Provider=Microsoft.Jet.Oledb.3.51;
UserID=Admin;"&_
"DataSource=D:\MicrosoftVisual
Studio\VB98\Nwind.mdb;"
cn.Open strCN ’调用Connection对象的方法Open连接数据源


  以上代码在访问ADO对象时,使用了前绑定(Early-bind),实现前绑定需要从VisualBasic的Project菜单下选择Reference菜单项,并选择MicrosoftActiveXDataObjects2.0Library。在程序中声明的strCN变量中,连接串属性Provider标识了OLEDBProvider为OLEDBProviderforMicrosoftJet,因为我们访问的是MicrosoftAccess数据文件,使用MicrosoftJetEngine可以获得比ODBC更好的性能。在试验以上代码时有两个地方要注意。首先,要根据系统安装的OLEDBProviderforMicrosoftJet服务选择相应版本,可能是3.51,也可能是4.0。在本例中使用的是3.51版本。如果使用4.0版本,首先需要将Provider属性改为"Microsoft.Jet.Oledb.4.0";其次,DataSource属性标识了所要访问的数据文件的路径,要根据自己的安装情况作出适当的调整。文件Nwind.mdb通常被VisualStudio默认安装,一般放在Visual Basic的工作目录下。

  除了OLEDB Provider for MicrosoftJet以外,Visual Studio6.0还提供了以下的OLEDBProvider,如下所示。

OLEDB Provider类型数据源类型
Microsoft OLEDB Provider for ODBCdatabases
Microsoft OLEDB Provider for Microsoft Index ServerMicrosoft(r) Index Server
Microsoft OLEDB Provider for Microsoft Active Directory ServiceMicrosoft(r) Active Directory Service
Microsoft OLEDB Provider for SQLServer Microsoft(r) SQLServerMicrosoft OLEDB Provider for Oracle
Oracledatabases

  这意味着使用ADO接口可以方便地访问以上的各种数据源,要做的就是选择适当的OLEDB Provider。除了使用Connection对象的Open方法以外,还可通过Recordset对象的Open方法快捷地创建到数据源的连接。这充分体现了ADO的灵活性。

  2.创建Command对象

Dim cmd As ADODB.Command

Set cmd=New Command’实例化Command对象


  3.执行查询

  以Command对象为例。

Dim rs As New ADODB.Recordset

Set cmd.ActiveConnection=cn’绑定激活的Connection对象实例

cmd.CommandText="SELECT*from Customers"’生成SQL脚本