关于网页数据库的操作,ASP拥有三种方法:ADO组件的Connection对象配合SQL语法;ADO组件的Command对象执行SQL语法;使用ADO组件的RecordSet。每种方法各有特点。
1、ADO组件Connection对象配合SQL语法
在网页上使用SQL指令处理数据的访问,需要使用ADO组件的Connection对象建立数据连接,以便让我们下达SQL指令到服务器端的数据库,处理表中的记录。参照3.2.3.1ASP网页数据库的连接所介绍的方法,首先建立一个Connection对象;然后再打开DSN-less,同时,根据将要进行数据操作的类型,设置其Mode属性;最后,使用Connection对象的Execute方法下达SQL指令,通常在使用Execute方法执行SQL指令前,应该指定其CommandTimeOut属性。以会员注册为例,用户填写完注册资料以后,提交系统,系统进行用户资料插入操作:
<%
’读取用户提交的资料至各变量
strSQL="INSERT INTO userlist(username,password,question,answer, "
strSQL= strSQL & "email,realname,sex,zjname,zjnumber, "
strSQL= strSQL & "lxway,birthday,homepage,quantity)"
strSQL=strSQL & "VALUES('"
strSQL=strSQL & strUsername & "','"
strSQL=strSQL & strPassword & "','"
strSQL=strSQL & strQuestion & "','"
strSQL=strSQL & strAnswer & "','"
strSQL=strSQL & strEmail & "','"
strSQL=strSQL & strRealname & "','"
strSQL=strSQL & strSex & "','"
strSQL=strSQL & strZjname & "','"
strSQL=strSQL & strZjnumber & "','"
strSQL=strSQL & strLxway & "','"
strSQL=strSQL & strBirthday & "','"
strSQL=strSQL & strHomepage & "','"
strSQL=strSQL & strQuantity & "')"
%>
<!---#include file="dbconrw.asp"--->
<%
objDBConn.Execute strSQL
%>
<!---#include file="dberror.asp"--->
这是最基本的数据库操作方式,特别是对于表的插入、删除和更新记录以及单条数据的查询操作,是三种方式中最为简单有效的一种。本系统中,用户身份验证、发表贴子以及回复贴子等相关数据库操作相当频繁,对数据存取效率有相当的要求,至于在数据存取的灵活性方面要求不高,因此,大部分都是采取ADO组件Connection对象配合SQL语法这种数据库操作方式。
2、ADO组件的Command对象执行SQL语法
Command对象和Connection对象的Execute方法一样能够执行SQL指令。在建立Command对象前一样需要建立和打开数据连接,假设活动连接objDBConn已经建立好,其后步骤如下所示:
Step1:建立Command对象,其程序代码如下:
Set objDBCommand=Sever.CreateObject(“ADODB.Command”)
Step2:接着指定ActiveConnection属性为目前打开的数据连接,代码如下:
ObjDBCommand.AvtiveConnection=objDBConn
Step3:指定CommandText属性为要执行的SQL指令,程序代码如下:
ObjDBCommand.CommandText=“Select * from userlist”
Step4:使用Execute方法执行SQL指令,objRS就是取得的记录集合,代码如下:
Set objRS=objDBCommand.Execute
上述步骤可以取得所有注册会员的详细注册资料,至于添加、删除和更新记录只需下达不同的SQL指令。需要注意的是,Command对象并不支持Close方法,所以关闭Command对象,只需设为Nothing即可。
建立复杂的SQL语句,通常得事先进行许多复杂的数据类型转换,使用Command对象配合Parameters数据集合建立SQL指令则相对来说比较简单,因为对象本身就能够自已处理复杂的数据类型转换,另外,比较Connection对象直接执行SQL语句来说,操作要灵活。
Command对象主要的目的是用在存储程序(Store Procedure),简单地说,存储程序是一些默认的处理程序。这个部分需用要数据源本身拥有指令处理的能力,象MS SQL Server就支持存储程序,但MS Access这类中小型数据库系统就不支持存储程序。
应该说,使用存储程序来操作数据库,具有较其它方式较明显的优点,首先,数据存取效率最高,因为存储过程经过了优化和编译,并且在第一次执行以后,就驻留在缓存中,另外,用户不必在网络上发送有时数以百计的SQL语句,只需通过执行一个简单的存储过程,就能够完成复杂的操作,减少了客户和DB服务器间传递的请求数目,减少了网络通信量。
本系统采用MS Access数据库,所以本方法作为未来系统扩展升级时数据库操作的首选方法。
3、使用ADO组件的RecordSet
RecordSet对象为ADO组件最重要的对象,从英文名字看来就是“记录集合”。它将表全部或部分的记录内容,象使用容器一样暂放所需的记录,RecordSet对象能够显示表的内容或进行记录数据的分析处理。
数据的目的是在访问、建立和处理记录,表的内容是由记录所组成。当我们在表中查询所需的数据时,其实就是在表的记录间寻找,RecordSet对象的记录集合可以把所需的记录取出,使用表格的方式,每一行就是一条记录,提供ASP程序一致的数据处理方式。
数据本身其实就是一个虚拟的表格,为什么一定要将它取出放入RecordSet对象容器,然后再进行处理呢?这是因为ADO组件数据源不见得就是数据库表,它可能是一个文本文件,而且所需的数据可能只有几笔,并不需要打开整个表提供全部的记录。直接在表中处理并没有效率,不如在RecordSet记录集合处理后,再更新表的记录,反而较有效率。
总之,不论数据源到底是什么,通过RecordSet对象的记录集合,就可以在ASP程序使用一致的方法处理数据,不论是文本文件、Excel还是数据库,它都是一个表格的记录集合。
在使用ADO组件的RecordSet对象时,因为处理的对象是记录集合,不是表的记录本身,所以,如果记录改变了,一定在用Update方法更新表,才能真正修改表的记录内容。
在数据的查询方面,RecordSet对象的使用相当灵活,虽然RecordSet对象一样可以插入、更新和删除记录,此时直接使用SQL指令反而较有效率。例如:只是插入一条记录,为什么需要建立RecordSet对象的记录集合,然后再更新记录?这在实际操作时,反而多此一举。但是,如果是从表中提取记录集合,然后要对记录进行相对较为复杂的分组分页显示,则使用RecordSet对象来操作数据比起SQL方式来要简单得多。本系统中象会员列表查询或是版主列表查询都采用ADO组件的RecordSet数据操作方式。