您现在的位置: 365建站网 > 365文章 > 2.2  使用ADO操纵数据库

2.2  使用ADO操纵数据库

文章来源:365jz.com     点击数:612    更新时间:2009-07-15 14:39   参与评论

2.2  使用ADO操纵数据库

在开发ASP应用程序时,使用最多或者说是必不可少的,应该是ADO组件了,因为它是操纵数据库的重要手段。下面介绍ADO的使用方法及注意事项。

2.2.1  什么是ADO

ADO,即Active Data Objects,实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口相连。用户可以使用任何一种ODBC数据源,即不仅适合于SQL Server、Oracle、Access等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。

2.2.2  ADO的内置类

ADO提供了一系列的类和方法,用来与数据库建立连接,然后对数据库中的数据进行增、删、改、查各种操作。下面分别介绍ADO中常用的几个类。

1.连接类——Connection

Connection类具有以下功能。

l          建立数据库连接。

l          执行SQL语句。

l          执行事务。

1)成员说明

连接类(Connection)用来与数据库建立连接。连接成功,Connection以对象的形式存在。应用程序通过一个连接对数据库进行操作。在建立连接前,最主要的是需要设置连接字符串,用来指定连接数据库所用的驱动程序、数据源名称、用户名和密码等。Connection类常用的属性与方法如下。

l          ConnectionString属性:连接字符串,在打开连接前需要设置。

l          ConnectionTimeout和Mode属性:超时时间和连接模式,一般在打开连接前也需要设置。

l          CursorLocation属性:设置或者返回游标位置。

l          DefaultDatabase属性:为连接指定一个默认的数据库。

l          IsolationLevel属性:确定事务(Transaction)在连接的隔离等级。

l          Provider属性:为连接指定一个驱动程序,可以包括在ConnectionString中。

l          Version属性:返回ADO的版本。

l          Open和Close方法:建立和中断一个连接。

l          Execute方法:在连接上执行命令,比如执行一条SQL语句。

l          BeginTrans、CommitTrans和RollbackTrans方法:用来管理事务。

l          Errors对象:数据源返回的错误信息。

CursorLocation属性取值的含义如下。

l          adUseServer:它可以随时反映数据库服务器上的改动,但是系统开销很大。

l          adUseClient:没有实时性,但可以对数据做再排序、筛选等操作。

如果对数据的实时性没有要求的话,建议尽量用adUseClient,以提高性能。

2)使用注意事项

创建连接是操纵数据库的第一步,也是数据库优化时大有文章可做之处,有效地管理数据库的连接,可以极大地提高应用程序的效率,这里就关于Connection的合理使用做一个简单的小结,详细的原理见本书“创建高性能的ASP应用程序”一章中关于ADO优化的相关内容。

l          使用OLE DB驱动程序,使用连接池。

l          使用前再创建连接,使用后立即关闭连接,释放对象(其实这里关闭连接是将用后的连接立即放入连接池中)。

l          绝对不要将连接存放在Application或Session中。

l          如果没有返回记录集,在Execute的参数中要加上adExecuteNoRecords,如:

cnn.Execute strSQL,,adCmdText + adExecuteNoRecords

2.命令类——Command

Command类具有以下功能。

l          预编译SQL语句。

l          执行SQL语句。

l          执行存储过程。

l          快速返回整个表的内容。

1)成员说明

命令类(Command)定义了对数据库的一系列操作。使用命令行对象来查询数据库并返回数据集(Recordset)对象形式的查询结果。命令类在操纵数据库前需要与一个已经打开的连接对象(Connection)建立关联。Command类常用的属性与方法如下。

l          ActiveConnection属性:将一个命令行对象与一个打开的连接关联。

l          CommandText属性:定义命令行的内容,比如SQL语句等。

l          CommandType属性:指定命令的类型。

l          CommandTimeout属性:指定服务器等待一条命令执行的时间。

l          Execute方法:执行命令行并返回一个数据集(Recordset)对象。

读者也许已经注意到了,Connection和Command类都有各自的Execute方法,都可以用来执行一条SQL语句,从这方面来讲,二者的差别不大。但Command类功能更为强大,通过指定CommandType属性,还可以执行存储过程等其他操作。

2)使用注意事项

提高数据库的操纵性能,除了提高数据库的连接性能外,还可以提高对数据的操纵性能,Command类正是为此而设计的。这里就关于Command的合理使用做一个简单的小结,详细的原理见本书“创建高性能的ASP应用程序”章中关于ADO优化的相关内容。

l          合理设置CommandType属性,以提高执行效率,不建议使用adCmdUnknown。

l          如果没有返回记录集,在CommandType属性上要加上adExecuteNoRecords。

l          如果需要重复的执行类似的SQL语句,可以先将它预编译,提高的效率也很可观。

3.数据集类——Recordset

Recordset类具有以下功能。

l          存放检索结果。

l          操纵数据,对数据进行增、删、改操作。

l          对数据再排序。

1)成员说明

数据集类(Recordset)定义了从数据库返回的一系列记录的集合。通过数据集可以对记录及组成记录的列进行各种操作。Recordset类常用属性与方法如下。

l          RecordCount属性:返回记录集中记录的条数。

l          LockType属性:对记录集的锁定方式,详见下面表2-8中的说明。

l          CursorType属性:记录集中游标类型,详见下面表2-9中的说明。

l          BOF、EOF属性:返回记录集中游标的当前位置是否是记录集的头或尾。

l          MoveNext、MovePre:将记录集中的游标向后、前移动一个位置。

l          MoveFirst、MoveNext:将记录集中的游标移动到最前或最后。

表2-8是属性LockType的取值。

表2-8  属性LockType的取值

名    称

解    释

adLockReadOnly

=1,默认值,表示以只读方式打开记录集,因而无法更改数据,在这种情况下使用AddNew方法就会发生错误

adLockPessimistic

=2,保守式记录锁定(逐条)。采用在调用Update方法时立即锁定数据源的方式。此时,其他用户不能访问该数据

adLockOptimistic

=3,开放式记录锁定(逐条)。只在调用 Update 方法时锁定记录

adLockBatchOptimistic

=4,开放式批更新。用于成批更新数据,与UpdateBatch方法相对应

以上的=1表示其常量值是1,依此类推。

表2-9是属性CursorType的取值。

表2-9  属性CursorType的取值

名    称

解    释

adOpenForwardOnly

=0,仅向前游标,默认值,只能在记录中向前滚动。这可以节省资源并提高性能

adOpenStatic

=3,静态游标。可以用来查找数据或生成报告的记录集合的静态副本。另外,对其他用户所做的添加、更改或删除不可见。推荐在ASP中只使用这两种游标

adOpenKeyset

=1,键集游标。键集游标与动态游标相似,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所做的数据更改将依然可见

adOpenDynamic

=2,动态游标。可以看见其他用户所做的添加、更改和删除。允许在记录集中进行所有类型的移动

以上的=0表示其常量值是0,依此类推。

当Recordset对象有效时,可以使用如例程2-4的方式来获得当前记录某一字段的值。其中“Name_S”是数据表中的字段名。

例程2-4  获得Recordset对象当前记录中某一字段的值

Dim rs

Dim strName as String

……

strName = rs("Name_S").Value

……

2)使用注意事项

RecordSet是专门为数据操纵而设计的,它可以接收Connection和Command类的检索结果,也可以自己向数据库发出检索命令。如果说Command类侧重在数据库方面做优化的话,那么RecordSet专门在用户对检索结果的处理上做优化。这里就关于RecordSet的合理使用做一个简单的小结,详细的原理见本书“创建高性能的ASP应用程序”一章中关于ADO优化的相关内容。

l          合理设置LockType的值,如果只是查看结果,设其值为adLockReadOnly即可。

l          合理设置CursorType的值,如果只用到MoveNext,则设其值为adOpenForwardOnly。

l          如果对数据的实时性没有要求的话,尽量用adUseClient。

l          只有当CursorType设为adOpenKeyset或adOpenStatic时,RecordCount才有效。

[NextPage]

 

2.2.3  在ASP中使用ADO常量

在早些年,有人曾推荐使用adovbs.txt这个文件,以访问 ADO 的各种常量。在要使用常量的每个页面中必须包含此文件。此常量文件相当大,增加了每个 ASP 页面的编译时间和脚本大小,而且编程也比较烦琐。

IIS 5.0 引入了绑定到组件类型库的功能。只需要引用类型库一次,便可将其应用在每个 ASP 页面上。每个页面不再产生编译常量文件的开销,而且开发人员不必在每个ASP文件中都用include加入那个庞大的文件了。

要访问ADOTypeLib,只需在global.asa文件中加入相应的引用即可,有以下两种途径:

<!-- METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library"

TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}" -->

<!-- METADATA TYPE="TypeLib"

FILE="C:\Program Files\Common Files\system\ado\msado15.dll" -->

这种方法当然也适用于对其他COM的引用,如CDO库,或其他自己开发的COM。

2.2.4  使用ADO的一般步骤

使用ADO操纵数据库一般可以分为以下几步。

(1)创建一个到数据源的连接(Connection),连接到数据库;或者开始一个事务(Transaction)。

(2)组织一条SQL语句,此SQL语句中即可进行插入、修改和删除等任何数据库操作,只要你与数据库建立连接时所使用的用户有足够的权限。

(3)执行SQL语句。

(4)如果SQL语句中使用的是SELECT语句,则可以将返回的数据保存在数据集对象Recordset中,以便进一步操作数据。

(5)通过数据集对象对数据进行各种操作,包括获取某一字段值,以及修改、增加、删除记录等。

(6)如果使用数据集对象Recordset对数据库进行了增、删、改的操作,最后必须更新数据源,如果使用事务,确认是否接受事务期间发生的数据变化。

(7)结束连接和事务。

使用SQL语句和使用数据集对象Recordset都可以向数据库中增加、修改、删除记录,两种方法可以说是殊途同归。使用Recordset操作似乎更简单一些,例如不需要处理字符串中的单引号问题等,但使SQL语句功能更为强大且通用。它除了可以操纵数据记录以外,还可以操作表、用户等。笔者在这里建议使用SQL语句来操纵数据记录,这样读者将来在使用其他技术开发数据库时,比如PHP、JSP等,会觉得非常顺畅。

下面通过实例的方式说明在Visual Basic中如何使用ADO与数据库建立连接并操纵数据库。

例程2-5完成了与数据库建立连接与关闭连接。基本思路就是先设置连接类Connection的必要属性,尤其是连接字符串ConnectionString,然后调用Connection类的Open方法打开连接,并将其保存在全局变量g_Conn中,以便在其他地方使用。GxcDBType定义为枚举类型,用来表示是连接到Access数据库还是SQL Server数据库。

例程2-5  建立与关闭数据库连接

<%

'更改数据库名字

db="database/database.mdb"

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

objConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0; &_

Data Source=" & Server.MapPath(db)

'如果你的服务器采用较老版本Access驱动,请用下面的连接方法

'objConn.ConnectionString="driver={Microsoft Access Driver (*.mdb)}; &_

dbq=" & Server.MapPath(db)

objConn.Open

Function CloseDatabase

         objConn.close

         Set objConn = Nothing

End Function

%>

与数据库建立连接后,下面便可以操纵数据库中的数据了。例程2-6是使用Connection类的Execute方法来执行一条SQL语句并将返回保存在Recordset中的示例。例程中的“TypeName”表示数据库中的某一字段名。

例程2-6  使用Connection对象操纵数据库

<%

'按输入的参数查询,并返回一个集合类

  Dim strSQL

  Dim strName

  '构造SQL语句

  strSQL = "Select * from ClientType "

  Dim rs

  Set rs = g_Conn.Execute(strSQL)

  '往集合中添加查询结果

  Dim i

  For i = 1 To rs.RecordCount

    strName = rs("TypeName").Value

    rs.MoveNext

  Next i

  Set rs = Nothing

%>

至此,关于ADO使用的基本知识就介绍完了,读者可以在以下几章的学习中来体会和实践ADO操纵数据库的一些技巧。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (612人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 建站公司
· 杰创官网
· 建站工具

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2022 版权所有 鄂ICP备17013400号