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 ODBC | databases |
Microsoft OLEDB Provider for Microsoft Index Server | Microsoft(r) Index Server |
Microsoft OLEDB Provider for Microsoft Active Directory Service | Microsoft(r) Active Directory Service |
Microsoft OLEDB Provider for SQLServer Microsoft(r) SQLServer | Microsoft OLEDB Provider for Oracle |
Oracle | databases |
这意味着使用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脚本