Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3376873
  • 博文数量: 1575
  • 博客积分: 19423
  • 博客等级: 上将
  • 技术积分: 16102
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-19 21:36
个人简介

专注专心

文章分类

全部博文(1575)

文章存档

2020年(10)

2018年(7)

2016年(6)

2015年(21)

2014年(32)

2013年(279)

2012年(516)

2011年(309)

2010年(260)

2009年(92)

2008年(15)

2007年(28)

我的朋友

分类: IT业界

2015-05-12 10:57:41

ASP:ADO数据库访问

(2013-04-08 17:17:19)
标签:

asp

ado

数据库连接

it

分类: 编程相

    现在很多动态网页是基于数据库的,网页的内容依靠数据库生成。信息的查询和输入也需要数据库支持,可以说网站的操作基本离不开数据库的支持。在ASP网站中,所有访问数据库的操作都可以由ADO(ActiveX Data Objects)来实现。如果不能掌握其使用方法,ASP程序员就无法编写出功能强大的ASP应用程序。本章将介绍ADO和访问数据库的方法。

13.1 ADO概述
ADO提供了访问各种数据库的连接机制,是目前流行的数据库连接方法之一。使用ADO提供的访问数据库统一接口,用户可以读取和写入几乎所有的数据库管理系统,包括Microsoft SQL Server、Oracle和Microsoft Access等,也可以访问Microsoft Excel的数据文件。
ADO是一个COM组件,任何COM技术的编程语言都可以使用,包括Microsoft Vis l Basic、Microsoft Vis l C++、Delphi,以及ASP。ASP脚本通过ADO技术执行SQL指令,对数据库记录执行添加、更新和删除操作,可以说ADO是适合Web数据库应用的最佳选择。
13.1.1 ADO对象
ADO提供了一系列的对象、属性和方法,用其可以轻松完成数据库的连接,以及数据的查询、添加、修改和删除等各种操作。在ASP中ADO由ADODB对象库中的子对象组成。ADO的常用对象如表13-1所示。
表13-1 ADO的常用对象
对象         说 明
Connection   连接对象,用来建立ASP脚本与数据源之间的连接
Recordset    记录集对象,表示从数据源返回的数据集
Command      命令对象,用来执行SQL语句或者SQL Server的存储过程
Field        域对象,表示记录集中一个字段
Parameter    参数对象,代表与带参数查询或者SQL存储过程的Command对象的一个参数
Property     属性对象,代表提供者的动态特征
Error        错误对象,与数据访问错误有关的详细信息


ADO集合如表13-2所示
表13-2 ADO集合
对象           说 明
Fields       与Recordset对象关联的所有Field对象
Parameters   与Command对象关联的所有Parameter对象
Properties   所有的Property对象
Errors       为连接错误创建的所有Error对象


13.1.2 使用ADO的步骤
在ASP中使用ADO操作数据库的步骤如下:
? 连接数据源。
? 设置访问数据库源的命令,一般为SQL语句
? 执行命令。
? 如果命令按行返回数据,则将数据存储在缓存中;如果使用SELECT语句,则保存在Recordset对象中。
? 修改缓存中的数据。
? 检测出现的错误。
? 结束连接
1、连接数据源
操作数据库前,必须首先建立与该数据库的连接,成功的连接才可以使应用程序访问数据源。Command、Recordset及Field等对象操作数据库时都必须依赖连接,Connection对象可以实现连接数据源操作,其常用属性如表13-3所示
表13-3 Connection对象的常用属性
属性               说 明
ConnectionString   连接字符串,表示与数据源建立连接的相关信息,需要在连接前设置
ConnectionTimeout  设置超时时间 ,默认值为30秒,需要在连接前设置
Mode               设置连接的模式,需要在连接前设置
DefaultDatabase    为连接设置一个默认的数据库
Provider           为连接指定一个驱动程序
Version            获取ADO的版本
Cursorlocation     获取或者设置游标的位置,该属性的取值如下: adUseNone:不使用游标服务  adUseServer: 默认值,实时反映数据库服务器上的修改,开销很大 adUseClient:没有实时性,但可以对数据进行查询等操作


Connection对象的常用方法如表13-4所示。
表13-4 Connection对象的常用方法
方法        说 明
Open       建立一个连接
Close      关闭一个连接
Execute    执行命令,如执行SQL语句


2、设置访问数据源的命令
访问数据源即可以直接使用SQL语句,也可以通过设置Command对象的属性实现。Command对象具有强大的数据库访问能力,通过它可以轻松地完成数据库的各种操作。该对象的常用属性如表13-5所示。
表13-5 Command对象的常用属性
属性               说 明
ActiveConnection   将Connection对象与一个打开的连接关联
CommandText        设置或获取命令
CommandTimeout     设置或者获取执行命令的最大时间,超过该值将终止命令的执行或者产生错误,该属性为长整型值,默认值为30,单位为秒
CommandType        表示Command对象的类型
State              指定对象的状态是打开还是关闭


Command对象的常用方法如表13-6所示
表13-6 Command对象的常用方法
方法      说 明
Cancel   取消执行的命令
Execute  执行在CommandText属性中指定的命令


3、获取数据
Recordset对象可以从执行的命令中返回数据集,它也是ADO普遍使用的一个对象。该对象可以存放命令返回的结果,并可以对记录执行增加、删除和排序等操作,其常用属性如表13-7所示。
13-7 Recordset对象的常用属性
属性           说 明
RecordCount    返回记录集记录的数目
AbsolutePage   指定当前记录所在的页,长整型。该值可以从1到所含页数,也可以是下列常数。 AdposUnknown: 当前Recordset为空 AdPosBOF:当前记录指针位于记录的头 AdPosEOF:当前记录指针位于记录的尾
BOF            指示当前记录位置是否位于记录集第1个记录之前,是,为Tr,否则为False
EOF            指示当前记录位置是否位于记录集最后一个记录之后。是,为Tr,否则为False
PageCount      设置或者获取当前记录中的数据页数
PageSize       设置或者获取记录集中一页所包含的记录数
RecordCount    获取记录集中记录的数目
LockType       设置或者获取访问记录的锁定类型,常用值如表13-8所示
CursorType     记录集中的游标类型,常用值如表13-9所示


LockType属性的常用值如表13-8所示
表13-8 LockType属性的常用值
方法                 值         说 明
adLockReadOnly         1         默认值,只读,不能更改记录数据
adLockPessimistic      2         通常在采用Update方法时锁定数据源的方式
adLockOptimistic       3         通常在调用Update方法时锁定记录
adLockBatchOptimistic  4         用于成批更新


CursorType属性的常用值如表13-9所示
表13-9 CursorType属性的常用值
方法               值    说 明
AdOpenForwardOnly    0    默认值,向前游标,只能向前滚动访问记录
AdOpenKeyset         1    键集游标,可以看到其他用户除了删除和添加之外的操作
AdOpenDynamic        2    动态游标,可以看到其他用户的修改操作
AdOpenStatic         3    静态游标,只能查找记录集的静态副本,看不到其他用户的操作


Recordset对象的常用方法如表13-10所示。
表13-10 Recordset对象的常用方法
方法          说 明
MoveFirst      将当前记录的指针移动到记录集的第一个记录
MoveLast       将当前记录的指针移动到记录集的最后一个记录
MovePrevious   将当前记录的指针向前移动一个记录
MoveNext       将当前记录的指针向后移动一个记录
AddNew         添加一个新记录
Delete         删除当前记录
Save           保存记录
Update         更新记录


4、检测出现的错误
使用ADO操作数据库时可能会出现错误,出现错误后会有一个或者多个Error对象入Connection对象的Error集合中。通过Error对象可以获取每个错误的信息,该对象的属性如表13-11所示。
表13-11 Error对象的属性
属性                   说 明
Description             错误的说明信息
Number                  标识错误的常量
Source                  说明产生错误的对象
adLockBatchOptimistic   用于成批更新


13.2 Connection对象
ASP程序在操作数据库时,需要建立与数据库的连接。ADO提供的Connection对象用于建立与数据库的连接,其属性和方法可以打开和关闭与数据库连接。在ASP中,ADO连接数据库的常用方法有以下三种:
    使用OLE DB连接
    使用ODBC连接
    使用DSN(Data Source Name)连接


13.2.1 使用OLE DB连接数据库
用OLE DB可以连接SQL Server、Microsoft Access及Excel等数据源,下面是连接不同数据库的方法。
1、建立与Access数据库的连接
下面的代码使用OLE DB连接Access数据库user.mdb:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'获取要连接的数据库的物理路径
path=Server.MapPath("/user.mdb")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
    "Data Source="&path
Conn.Open   '打开与数据库的连接
%>
代码说明如下:
? Provider:OLE DB提供者的名字,如“Microsoft.Jet.OLEDB.4.0”
? Data Source:指定数据源的名称,如“d:\text\13\user.mdb”.
? UserID:连接数据源时所用的用户名称
? PassWord:连接数据库时用户的密码。
上面的形成也可以修改成下面的代码:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'获取要连接的数据库的物理路径
path=Server.MapPath("/user.mdb")
'依据连接的数据库设置连接字符串
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;","Data Source="&path
%>
Open方法的语法格式如下:
connection.Open ConnectinString,UserID,Password,Option
语法格式说明如下:
? ConnectionString:可选项,指定连接信息的字符串,其中包含由分号隔开的一系列语句。这些语句设置连接的属性,如“Provider=Microsoft.Jet.LEDB.4.0”
? UserID:可选项,指定连接数据库所用的用户名,此处指定的UserID将覆盖Connectionstring字符串中指定的UserID。
? Password:可选项,指定连接数据库所用的密码,此处指定的Password将覆盖ConnectionString字符串中指定的Password。
? Options:可选项,指定建立连接的方式,常用常量值如表13-12所示。


表13-12 Options的常用常量值
常量                    说 明
adConnectUnspecifield   默认值,同步打开连接
adAsyncConnect          异步打开连接


2、建立与SQL Server数据库的连接
下列使用OLE DB连接SQL Server数据库:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=SQLOLEDB;DataSource=ServerName;Initial Catalog=DataBaseName;UserID=UserName;password=PWD;"
Conn.Open   '打开与数据库的连接
%>
代码说明如下:
? 连接SQL Server时,OLE DB的提供者名为“SQLOLEDB”
? DataSource:SQL Server服务器名
? Initial Catalog:数据库名
? UserID:可选项,指定连接数据库所用的用户名
? Password:可选项,指定连接数据库所用的密码。


13.2.2 使用ODBC连接
     ODBC也可以连接SQL Server及Microsoft Access等数据库。从连接形式上,可以使用DRIVE、DBQ、Provider和DataSource等关键字区分ODBC和OLE DB连接方式。使用ODBC连接数据库时,连接字符串通常有DRIVER和DBQ;使用OLE DB连接数据库时,连接字符串通常含有Proviider和DataSource等关键字。下面是使用ODBC连接不同数据的方法。


1、建立与Access数据库的连接
下面是使用ODBC连接Access数据库的代码:
<%
'创建ADODB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="DRIVE={Microsoft.Access.Driver(*.mdb)}"&_
       "DBQ="&Server.MapPath("/user.mdb")
Conn.Open
%>
代码说明如下:
? DRIVER:指定ODBC所用的驱动程序,如连接Access数据库所用的驱动程序为“Microsoft.Access.Driver(*.mdb)”。
? DBQ:指定Access数据库的物理路径。


2、建立与SQL Server数据库的连接
下面是使用ODBC连接SQL Server数据库的代码:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString='"DRIVER=(SQLServer);Server=ServerName;"&_
    DataBase=DataBaseName;UID=UserName;PWD=Password;"
Conn.Open   '打开与数据库的连接
%>
代码说明如下:
? 连接SQL Server时,OLE DB的提供者名为“SQLOLEDB”。
? Server:SQL Server服务器名。
? Database:数据库名
? UID:可选项,指定连接数据库所用的用户名。
? PWD:可选项,指定连接数据库所用的密码。

3、建立与Excel的连接
在网站设计时有时需要获取Excel数据源中数据,ADO连接Excel文件的方法如下:
<%
Set ExcelConn=Server.CreaeObject("ADODB.Connection")
ExcelFile=Server.mappath("text.xls")
'依据连接的数据库设置连接字符串
ExcelDriver="Driver={Microsoft Excel Driver(*.xls)};DBQ&ExeclFile
ExcelConn.Open ExcelDriver
%>
代码说明如下:
? DRIVER:连接Excel文件所用的驱动程序
? DBQ:指定Excel文件的物理路径。


13.2.3 使用DSN连接数据库
     DSN是ODBC的数据源名,用来标识数据源的字符串,其中包含连接特定数据源的信息,这些信息包括数据源名称及ODBC驱动程序。DSN主要有以下三种类型。
? 用户DSN:只有建立该DSN的用户才能访问该数据源,并且只能在本计算机上使用,不能从网络上访问该数据源。
? 系统DSN: 可以被该计算机上的所有有权限的用户访问。
? 文件DSN:与系统DSN相似,但是可以从网络上访问该数据源。
DSN可以由控制面板中的数据源创建、修改并删除,本节将介绍建立Microsoft Access和SQL Server的DSN的方法。


1、建立Access数据库的DSN
步骤1在Windows 2000 Server操作系统中,单击“开始”|“程序”|“管理工具”|“数据源ODBC”命令,弹出“ODBC数据源管理器”对话框,如图13-1所示。也可以打开“控制面板”窗口,双击“管理工具”|“数据源ODBC”图标,打开该对话框。

 


步骤2:单击“系统DSN”标签,打开“系统DNS”选项卡,如图13-2所示。
步骤3:单击“添加”按钮,弹出“创建数据源”对话框,如图13-3所示。

 


步骤4:选择“Microsoft Access Driver(*.mdb)”选项,单击“完成”按钮弹出“ODBC Microsoft Access安装”对话框,如图13-4所示。
步骤5:输入数据源名,单击“选择”按钮弹出“选择数据库”对话框,如图13-5所示。

 


步骤6:在“数据库名”下拉列表框中选择数据库,单击“确定”按钮建立DNS如图13-6所示。


2、建立SQL Server数据库的DSN
建立SQL Server数据库的DSN方法基本类似,操作步骤如下:
    步骤1:在“创建数据源”对话框中选择“SQL Server”选项,单击“完成”按钮弹出“创建到SQL Server的新数据源”对话框,如图13-7所示。
    步骤2:在“名称”文本框中输入DSN的名称。在“服务器”下拉列表框中选择SQL Server服务器,或者输入“localhost”连接本地SQL Server服务器,单击“下一步”按钮,弹出验证方式对话框,如图13-8所示。 

步骤3:若选择“使用网络登录ID的Windows NT验证”单选按钮,将以当前登陆Windwos NT的用户登录SQL Server数据库;若选择“使用用户输入登录ID和密码的SQL Server验证”单选按钮,将以SQL Server的用户登录SQL Server数据库。本例选择“使用用户输入登录ID和密码的SQL Server验证”单选按钮,输入SQL Server的用户sa和密码。单击“下一步”按钮,弹出访问数据库设置对话框。
    步骤4:选中“更改默认数据库为”复选框,在下拉列表框中选择要连接的数据库。单击“下一步”按钮,弹出数据库设置对话框。
    步骤5:设置SQL Server系统消息的语言、货币、时间及数字的格式,以及保存查询的日志文件等选项。单击“完成”按钮,弹出“ODBC Microsoft SQL Server安装”对话框。
    步骤6:单击“测试数据源”按钮,测试连接数据源的正确性。弹出“SQL ServerODBC数据源”测试对话框
    步骤7:如果测试成功,则表示连接正确,单击“确定”按钮完成操作。
    设置DSN之后可以通过DSN连接数据库,使用DSN连接数据库的示例代码如下:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="DSN=Test;UID=sa;PWD=; "
Conn.Open   '打开与数据库的连接
%>
代码说明如下:
DSN:DSN的名称
UID:用户名。
PWD:密码。


13.3 Recordset对象
    Recordset(记录集)对象是ADO中另一个非常重要的对象,在数据库操作中经常用到。该对象代码执行命令后返回的记录集合,通过该集合可以执行查看、修改及删除记录等各种操作。本节介绍如何建立Recordset对象,以及该对象的方法和属性。

13.3.1 建立Recordset对象
在使用Recordset对象前,需要创建该对象,语法格式如下:
Set Rs=Server.CreateObject(“ADODB.Recordset”)
读取表中所有记录示例的实现如下:
1、连接数据库
下面是连接数据库的代码:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
%>


2、建立Recordset对象并获取所有记录
下面的代码建立Recordset对象并使用Open()方法获取指定表记录。
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
代码说明如下:
本段代码使用Open()方法获取Group_Info表中的所有记录。
Open()方法获取表中的所有记录或查询的记录,其语法格式如下:
rs.Open DataSource,Conn,CursorType,LockType,Options
语法格式说明如下。
Rs:          Recordset对象实例。
DataSource:  可选项,可以为SQL语句、表名及存储过程调用等。
Conn:        可选项,可以为Connection对象的实例或包含ConnectionStrin的字符串。
CursorType:  可选项,指定使用的游标类型,其常用常量的值如表13-9所示。
LockType:    可选项,指定使用的锁定类型,其常用常量的值如表13-8所示。
Options:     可选项,指定执行DataSource的方法。


3、输出记录
可以使用下面的方式获取记录指定的字段内容:
rs(Name)
其中rs为Recordset对象实例,Name为字段的名称,rs(Name)为当前记录的Name字段的内容。
输出所有记录内容会用到Recordset对象的EOF或者BOF属性,EOF属性标识记录指针是否移动到最后一条记录之后,即访问是否结束;BOF属性用来标识记录指针是否移动到首条记录之前。
下例使用Recordset对象输出所有记录的内容:
<%
If not rs.EOF then
Do while not rs.Eof
   Response.write "职位:"&rs("Name")&_
     "。描述信息:"&rs("Info")&"
"
     ‘需要使用MoveNext把记录指针移动到下一条记录
   rs.MoveNext
Loop
Else
Response.write "没有记录!"
End If
rs.close         ‘关闭recordset
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>


4、包含adovbs.inc文件
    本例使用多个常量,这些常量声明后方可使用。ASP已经提供了这些常量的定义值,ASP程序员不需要单独定义这些常量。它们包含在文件adovbs.inc中,使用这些常量时需要包含这个文件。
adovbs.inc文件存放在系统盘中的Program Files\Common Files\System\ado目录下,将该文件复制到指定的目录下即可引用。本例将该文件复制到当前目录下,使用下面的方式引用:

13.3.2 分页显示记录
    当查询网站的记录数目特别多时,需要分页显示,分页显示需要确定记录的数目。Recordset对象提供了RecordCount属性,用于返回Recordset对象的记录总数。


1、使用RecordCount属性实现分页显示
下例使用RecordCount属性实现分页显示。
(1)连接数据库,下面是连接的数据库代码:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
%>
(2)建立Recordset对象并获取所有记录,下面的代码建立Recordset对象并使用Open()方法获取所有的记录:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
(3)设置分页参数,分页时需要获取记录总数。设置每页显示的记录数目,总页数和当前页数和代码的如下:
<%
Dim rsCount 存储记录总的数目
‘获取所有的记录数目并赋给变量reCount
rsCount=rs.RecordCount
‘变量Page存储总的页数,PageSize为每页显示的记录数目
Dim Page,PageSize
Dim n ‘用来存储查询过的记录数
n=0   ‘初始值为0
‘设置每页的记录数目为2
PageSize=2
‘计算总的页数
Page=rsCount/PageSize
‘获取当前的页数
PageNo=Trim(Reqst.QryString("Page"))
‘如果用户指定的页号为空,则使该页的数值为第1页
If PageNo="" Then PageNo=1
‘把页号转化成数值,如果不是数值,将出错
PageNo=Cint(PageNo)
‘如果该值小于1,则使该值为1;如果为总页数,则设置该值为总页数
If PageNo<1 Then PageNo=1
If PageNo>Page Then PageNo=Page
%>
(4)显示记录,显示指定页的记录要使记录指针移动到指定页。本例创建一个计数器n,用于判断记录指针是否移动到指定页中的记录。下面的代码使记录指针移动到指定页。但是这种方法效率不高,在14.5节中介绍了另一种分页办法,读者可以参考:
<%
‘读取所有的记录
Do while not rs.Eof
‘判断当前记录是否是指定页内的记录,是,则输出
If n>PageNo*PageSize and n<=PageSize*(PageNo+1) Then
   Response.write "职位:"&rs("Name")&_
     "。描述信息:"&rs("Info")&"
"
End If
n=n+1   ‘记录数目加1
rs.MoveNext   ‘读取下一条记录
Loop
%>
(5)显示分页,下面的代码显示页号连接,以方便用户查询:
<%
‘显示所有的分页连接
For i=1 to Page
Response.write "第"&i&"页 "
Next
%>
(6)关闭连接,代码如下:
<%
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>


2、使用AbsolutePage分页
上例需要程序员设置和计算页数,相对麻烦。Recordset对象提供了实现分页的属性,这样属性是AbsolutePage、PageCount和PageSize。下面是使用这几个属性实现分页的示例。
(1)连接数据库,代码如下:
<%
'创建ADO DB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
%>
(2)建立Recordset对象并获取所有记录,下面的代码建立Recordset对象并使用Open()方法获取所有的记录。
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
(3)设置分页参数,代码如下:
<%
‘设置每页显示记录的数目
rs.PageSize=2
Dim page              ‘保存总的页数
page=rs.PageCount            ‘获取总页数
PageNo=Trim(Reqst.QryString("Page"))      ‘获取读取页的页码
If PageNo="" Then PageNo=1
‘把指定页的页码转换成整数
PageNo=Cint(PageNo)
‘如果小于1,则设置该页码为1.
If PageNo<1 Then PageNo=1
‘如果指定页的页码大于总页数,则设置该页码为总页数
If PageNo>Page Then PageNo=Page
‘设置当前页为指定页的页码
rs.AbsolutePage=PageNo
%>
代码说明如下:
? PageSize属性:每页的记录条数
? PageCount属性:表示Recordset对象的分页总数。
? AbsolutePage属性:获取或设置当前页的页码。
(4)显示当前页记录,代码如下:
<%
‘显示当前页记录,代码如下:
For i=1 To rs.PageSize
   ‘如果记录指针已经移动到最后一条记录之后,则终止读取记录
If rs.EOF then exit for
Response.write "职位:"&rs("Name")&_
     "。描述信息:"&rs("Info")&"
"
rs.movenext    ‘读取下一条记录
next
%>
(5)显示页号,代码如下:
<%
For i=1 to Page
Response.write "第"&i&"页 "
Next
%>
(6)关闭连接,代码如下:
<%
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>


 

13.3.3 添加和删除记录

Recordset对象属的属性和方法也可以添加和删除记录,Addnew()方法添加记录,Delete()方法删除记录。下例使用这两个方法添加和删除记录。


1、界面
界面中提供了一个表单,其中包括两个文本框和一个“提交”按钮。该例显示所有的记录,每个记录都有“删除”链接,添加记录时,数据提交到Insert.asp文件处理,删除记录由文件delete.asp实现。界面的实现代码如下:





新建网页 1




职位名称:


职位描述:




<%
'创建ADODB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")

'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open "Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
Do While not rs.EOF
Response.write rs("Name")&" 删除
"
rs.movenext
Loop
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>




2、添加记录
下面的代码获取的记录信息添加到表中:

<%
'创建ADODB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
Set rs=Server.CreateObject("ADODB.Recordset")
'打开指定的表
rs.Open "Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
'获取添加记录的信息
Name=Reqst.Form("MingCheng")
Info=Reqst.Form("XinXi")
Response.write Name&Info
'使用Addnew方法添加一条记录
rs.AddNew Array("name","Info"),Array(Name,Info)
rs.Update    '更新记录
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
代码说明如下:
? AddNew()方法在数据库中添加记录,其语法格式如下:
Rs.AddNew Field,Vals
其中,Field是可选项,可以为记录字段的名称或一组记录的名称;Val也是可选项,为新记录中的字段值或者一组字段的值。
? AddNew()方法添加记录后需要使用Update()方法更新记录后才能添加成功。
? Update()方法用来保存在数据库中添加的记录,其语法格式如下:
Rs.Update Field,Val
其中Field是可选项,可以为记录字段的名称或一组记录的名称;Vals也是可选项,为新记录中的字段值或者一组字段的值。


3、删除记录
下面是删除用户指定记录的代码:

<%
'创建ADODB.Connection对象
Set Conn=Server.Createobject("Adodb.Connection")
'依据连接的数据库设置连接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("oa.mdb")
Conn.Open '打开与数据库的连接
Set rs=Server.CreateObject("ADODB.Recordset")
'获取用户指定的记录序号
ID1=Reqst.Qry("ID")
Dim Sql
'设置查询该记录的SQL语句
sql="SELECT * FROM [Group_Info] WHERE [ID]="&ID1
'查询记录
rs.Open sql.,Conn,adOpenKeyset,,adCmdTable
rs.Delete     '删除查询记录集中的记录
rs.Update     '更新数据库
rs.close    
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
记录主要使用Delete()方法实现,其语法格式如下:
Rs.Delete AffectRecords
其中Rs为Recordset对象实例,AffectRecords参数指定操作所影响的记录数目,常用的常量值如表13-13所示。
表13-13 AfferRecords参数的常用常量值
常量                      说 明
AdAffectCurrent       默认值,仅删除当前记录
AdAffectGroup         删除满足Filter属性设置记录
adAffectAll           删除所有记录
adAffectAllChapters   删除所有子记录


 

13.3.4 跳转到指定记录

Recordset对象提供的方法和属性既可以实现分页显示的功能,也可以实现跳转页面的功能。下例跳转到指定记录或第1条和最后一条目录,其界面如图13-17所示。
该例的实现流程如下:
(1)连接数据库。
(2)获取操作类型。
(3)查询数据库中的表。
(4)依据操作类型设置记录指针。
(5)判断指针是否到尾记录,是,则转(7).
(6)显示记录信息
(7)结束。


1、连接数据库
代码如下:
<%
Set Conn=Server.Createobject("Adodb.Connection")
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
        "Data Source="&Server.MapPath("user.mdb")
Conn.Open
%>


2、获取操作类型
在本例中,变量action标识操作类型。Action值为“First”,表示将记录指针移动到首记录:为“Last”,表示将记录指针移动到尾记录;为“1”,表示将记录向前,或向后移动指定数目的指针,获取操作类型的代码如下:
<%
action=Trim(Reqst,QryString("action"))
%>
查询表的代码如下:
<%
sql="select * from Goods"          '设置查询表的SQL语句
Set rs=Conn.Exectute(sql)    '执行该查询并将结果输出到rs记录集中
%>
依据操作类型显示记录的代码如下:
<%
'下面输出所有的记录,使用recordset对象的属性判断记录访问是否结束
Do while not rs.Eof
If action="First" Then
'将记录指针移动到首记录
rs.MoveFirst
'将action赋值为空,否则会每次死循环状态
action="";
ElseIf action=“Last” then
   '将记录指针移动到尾记录
   rs.MoveLast
   action=""
ElseIf IsNumeric(action) Then
   '获取用户输入的字符并转换成数字
   Action=Cint(reqst.Form("T1"))
   '将记录指针向前或向后移动指定的数目
   rs.Move action
   action=""
else
   '向后移动一个记录
   rs.MoveNext
End If
If not rs.EOF Then Response.write rs("Name")&"
"
Loop
%>
代码说明如下:
? 该段代码使用了Recordset对象的MoveFirst()、MoveLast()、MoveNext()和Move()方法移动记录指针。
? MoveFirst()方法把Recordset对象的记录指针移动到第1条记录。使用该方法时,CursorType属性只能为adOpenForwardOnly,其语法格式如下:
Rs.MoveFirst
其中rs为Recordset对象实例。
? MoveLast()方法把Recordset对象的记录指针移动到最后一条记录。如果Recordset对象不支持书签功能,执行时会出现错误。其语法格式如下:
Rs.MoveLast
? MoveNext()方法把Recordset对象的记录指针移动到下一条记录。
? Move()方法把记录指针向前或者向后移动指定的数目。
? 使用Recordset对象的EOF属性判断访问是否结束。Recordset对象还有一个类似属性BOF,该属性用来标识记录指针是否移动到首条记录之前。


3、交互界面
交互界面包含两个链接,一个文本框和两个按钮,实现代码如下:
首记录    尾记录
  





  

阅读(1274) | 评论(0) | 转发(0) |
0

上一篇:云时代应用

下一篇:ASP动态网页制作系统

给主人留下些什么吧!~~