《数据库访问 》PPT课件.ppt
第10章 数据库访问,主要内容,几乎所有的基于Web的应用程序都使用到数据库,本章主要讨论 与数据库有关的技术 SQL语言中的常用语句 通过ADO使用数据库 通过ADO中的记录集使用数据库,本章目录,例2:插入一条静态记录,例1:显示通讯录中全部记录,10.2 设置ODBC数据源,例3:将表单中的输入插入到数据表中,10.1 网站数据库技术概述,本章小结,习题,10.3 使用SQL语言,例5:通过选择来删除记录,例6:更改某一记录,例4:删除满足条件的记录,例7:通过表单输入修改内容,例8:记录的显示和添加,例9:修改数据,例10:成批修改记录,10.4 通过ADO使用数据库,10.5 通过记录集对象使用数据库,例11:删除数据,例12:分页显示记录,10.1 网站数据库技术概述,数据库是存放大量用户信息的场所,几乎所有的基于Web的应用程序都使用到数据库,通过网页形式访问数据库也是本课程中必不可少的内容。这里介绍CGI,IDC,ASP中与数据库有关的技术,CGI程序与数据库,在使用VB编写的CGI程序中,可以使用DAO和RDO提供的对象,直接打开数据库并创建记录集,形式如下:set DB=OpenDatabase(“数据库文件路径”)set rs=DB.OpenRecordSet(“数据库中的表名”)由于使用实际的文件路径,应用程序和数据的提供者密切相关。,参考:网页中使用CGI程序例,IDC技术与数据库,引入IDC(Internet Database Connector)之后,人们使用IDC技术,在ODBC(开放式数据库连接)的支持下,通过执行SQL(结构化查询语言)语句,完成对数据库记录的查询、添加、更新和删除操作,并通过模板文件来规定结果的输出形式。,IDC技术与数据库,使用IDC技术,可以方便地完成数据库应用系统的编程,应用程序和数据提供者无关。但IDC技术的缺点是交互性较差。,参考:网页中使用IDC技术例,ASP中的数据库,ADO(ActiveX Data Objects)是一组接口,它通过系统级编程接口OLE DB,提供了一个应用程序级的数据访问对象,它易于使用,与编程语言无关,与提供者无关,它通过ODBC支持,可以访问几乎所有类型的数据库。,ASP中的数据库,当ASP脚本中需要访问数据库时,可以创建ADO数据对象,再通过在数据对象上执行SQL语句,来操作数据库,或者通过进一步创建功能强大的记录集对象,通过记录集对象上的有关方法,方便、灵活地操作数据库中的数据。最后得到的结果可以组织成html文档发送到客户端。,ASP中的数据库,在ASP中访问数据库,需要掌握以下有关内容:数据库及数据表的建立ODBC数据源的设置方法SQL语句编写ADO数据对象的创建和操作记录集对象的创建和操作数据的组织与输出,10.2 设置ODBC数据源,通过设置ODBC数据源,ASP脚本程序可以用统一的方式使用各种不同类型的数据库。这样,当数据库环境发生变化时,只需简单地重新设置ODBC数据源,就可以在新的数据库环境下使用了。应用程序几乎不要作任何改动。,10.2 设置ODBC数据源,ODBC实质上只是一个中间软件,它能够将通用的SQL语句转换为对某种数据库的具体操作。要设置ODBC数据源,可通过系统的控制面板来实现,具体操作步骤如下:,打开控制面板,单击开始、设置、控制面板显示如图:,10.2 设置ODBC数据源,注意:Windows2000中设置ODBC数据源在控制面板中的管理工具下进行:,10.2 设置ODBC数据源,双击ODBC 数据源(32bit)图标,出现如图所示。,10.2 设置ODBC数据源,为确保计算机的所有用户都能访问新的ODBC数据源,选择系统DSN有。,10.2 设置ODBC数据源,(3)单击添加,创建一个新的数据源。,创建一个新的数据源,出现如下图:,ODBC Access 设置窗口,单击完成,出现如下图:,命名数据源,填写数据源名,如Northwind。并输入需要的描述(可省):,选择数据库文件,通过标准打开文件对话框,选择作为数据源的数据库文件。,确定设置,确定设置,显示如下图:,完成设置,完成设置,可看到已设置的数据源:,10.2 设置ODBC数据源,注意:若你刚使用Access数据库环境创建数据库及表,还没有退出这一环境时,这步“选取”数据库操作可能会得到“非法目录”的提示。此时只需先关闭数据库,并退出Access环境即可。,10.3 使用SQL语言,SQL(Structured Query Language),结构化查询语言,用于查询、更新和操作关系数据库。本节主要讨论SQL的四个基本语句,即:查询(SELECT)插入(INSERT)删除(DELETE)修改(UPDATE),准备知识,在讨论之前,有必要对数据库的基本概念作一介绍。(1)表(2)记录(3)索引(4)数据库,(1)表,表是一种按行与列排列的相关信息的逻辑组,例如某厂的人事挡案表。表中每一列在数据库中称作一个字段。表中有什么样的字段,每个字段中可以存放什么类型数据,这些信息决定了一个表的基本结构。,(2)记录,在表中,每个工作人员的相关信息都存放在表的一行中,被称为一个记录。一个表也就成了一个记录的集合(RecordSet)一般来说,数据库中表的任意两行都不能完全相同。,(3)索引,为了更快地访问数据,大多数数据库都使用索引。数据库表的索引类似于书的目录一样,它也是一个表,索引表中按照一定的顺序存放了数据表中经常要查询的一些重要数据及这些数据对应于表中的位置。对数据库进行查询时,系统可以首先查找索引表,再根据索引表中的记录位置找到数据记录。,(4)数据库,通常一个数据库由若干个表构成。或者说数据库是表的集合。以下分别介绍SQL中的常用语句。,1查询(SELECT),Select语句用于从数据库中获得一些信息,如从一个表中获得部分记录的部分字段内容,从多个表中组合形成一个新的记录集等。,1查询(SELECT),Select语句的一般格式如下:SELECT DISTINCT项目名称表FROM 表名1,表名2,WHERE 条件GROUP BY 表达式HAVING 条件ORDER BY 字段名DESC|ASC,1查询(SELECT),其中:(1)DISTINCT指出若结果记录集中有重复记录时,只取其中一条。例如:为了从基本情况表中了解本单位有多少种不同的职称,可使用如下查询形式:SELECT DISTINCT 职称 FROM 基本情况表其中“基本情况表”是数据库中的一个表名,而“职称”为该表中的一个字段名。,1查询(SELECT),(2)项目名称表可以由多个项目用逗号分隔,每个项目可以是字段名或表达式,字段名前可以指出字段所属的表名。例如:为了得到基本情况表中的所有记录,形式如下:SELECT*FROM 基本情况表例如:为了得到学习情况表中的学号和总分数据:SELECT 学号,数学+语文+学习情况表.英语AS 总分 FROM 学习情况表,1查询(SELECT),当选择内容是一个表达式时,后面用AS引导一个名称,作为结果记录集的字段名。例如:为了从学习成绩表中得到全部同学的数学平均分,可使用如下形式:SELECT AVG(数学)AS 平均分 FROM 学习情况表其中:AVG是SQL中可以使用的集合函数,作为结果记录集的字段名,1查询(SELECT),项目名称表中常用的集合函数还有COUNT(求记录条数)、SUM(求和)、MAX(求最大值)和MIN(求最小值)等。当需要表示选择全部字段时,用“*”表示。,1查询(SELECT),(3)WHERE后的条件可以是简单的关系式,如:职称=工程师也可以是由“AND”、“OR”和“NOT”连接起来的几个关系式,如:SELECT 书名 FROM 书目表 WHERE 类型=文学 AND 价格25,1查询(SELECT),(4)GROUP BY项可根据某一表达式的值将记录分组,而HAVING可确定某一组是否满足条件。例如:为了从选修课程学生名单表中得到选修人数大于40的课程号和人数,可使用如下形式的查询:SELECT 课程号,COUNT(课程号)AS 人数 FROM 名单 GROUP BY 课程号 HAVING COUNT(课程号)=40,1查询(SELECT),(5)ORDER BY项用于将结果记录按某一字段值进行排序输出,ASC选项表示升序,DESC表示降序。例如:为了将学习成绩表按数学成绩从高到低输出,可使用如下形式查询:SELECT*FROM 学习成绩表 ORDER BY 数学 DESC,1查询(SELECT),(6)除了以上基本格式外,还可以在SELECT 后面直接跟“TOP n PERCENT”来指出只返回特定数目的记录,或前面一定百分比的记录。例如:要从学生基本情况表中返回2000年入学的前25名学生的姓名,可使用如下形式:SELECT 姓名 TOP 25 FROM 基本情况表 WHERE 入学年份=1994,2插入(INSERT),Insert语句用于向表中添加一个或多个记录。可以将一组值作为一个记录追加到表中,形式为:INSERT INTO 表名(字段名表)VALUES(值的列表)其中:如果“值的列表”中包含了所有字段的值,则格式中字段名表可以省略。“字段名表”和“值的列表”中各数据的类型必须保持一致,个数也要保持一致。,2插入(INSERT),例如:在只包含姓名和年龄的学生表中插入一个姓名为“张三”,年龄为23的记录的形式如下:INSERT INTO 学生表 VALUES(张三,23)其中字符型常量“张三”用单引号括起来,数值型常量23不用定界符。如果学生表中还有其它字段,则上述语句执行时会产生错误。,2插入(INSERT),可以将查询的结果插入到一个表中,形式如下:INSERT INTO 目标表(字段名表)SELECT 子句部分,3删除(DELETE),Delete语句可从表中删除满足一定条件的一个记录或一组记录。使用形式如下:DELETE FROM 表名 WHERE 条件其中,表名指出需要删除一个或多个记录的数据表名称。该命令一次可能删除多个记录。,3删除(DELETE),例如:由于老职工的退休,需要从工资表中删除年龄大于60岁的全部人员,可以使用如下形式的SQL语句:DELETE FROM 工资表 WHERE 年龄=60,3删除(DELETE),注意:当删除记录之后,不能取消此操作。如果想要知道哪些记录将被删除,可以首先使用相同条件的查询观察结果,然后运行删除操作。随时将数据做备份副本。如果误删除记录,可以从备份副本中将数据恢复。,4修改(UPDATE),Update命令可以更改指定表中,满足指定条件的一个或多个记录的某些字段的值。使用形式如下:UPDATE 表名 SET 字段=值,字段=值,WHERE 条件 其中,表名指出要更改的数据表名,SET子句后的“字段=值”表示将某个值赋给对应的字段。WHERE后的条件用来指出被更新的记录应符合的条件。,4修改(UPDATE),例如需要为联合王国的一家公司增加10%的订货量和3%的货运,对应的SQL语句如下:UPDATE 订货表SET 订货量=订货量*1.1,货运=货运*1.03WHERE 公司名称=UK 注意:UPDATE 不生成结果记录集。而且当使用更新操作更新记录之后,不能取消这次操作。如果想知道哪些记录将被更新,只能事先用相同条件的查询操作来观察。,4修改(UPDATE),注意:随时注意维护数据的复制备份。如果更新错了记录,可从备份副本中恢复这些数据。,5建立数据表和删除数据表,可以使用CREATE命令来创建一个新的表格,其使用形式为:CREATE TABLE 表名(字段名 数据类型NOT NULL,字段名 数据类型NOT NULL,)例如:CREATE TABLE 学生(学号 INTEGER,姓名 CHAR(8),性别 CHAR(2),5建立数据表和删除数据表,一旦创建了一个数据表,就可以使用上面介绍的INSERT命令进行添加数据,以及用其它命令进行相应的操作。如果一个数据表不再有用了,可以使用DROP命令来删除这个数据表。其使用格式为:DROP TABLE 表名注意:删除表同时也将表中的全部数据删除,应谨慎使用。,10.4 通过ADO使用数据库,应用ADO(ActiveX Data Object)技术实现网站数据库查询的操作的几个步骤:建立数据库在数据库中创建数据表建立ODBC数据源(见第2节)在脚本中利用ADO对象进行数据库中表的操作,用任意一种数据库,10.4 通过ADO使用数据库,应用ADO进行数据库设计一般有两种方式,一种是直接在连接对象上执行SQL语句,完成相应的操作。另一种方式是通过创建功能强大的记录集对象,再在记录集对象上进行相应的操作。,10.4 通过ADO使用数据库,第一种方式主要用于能使用简单的SQL语句直接能完成操作的场合,如插入一条已知数据的记录,删除一些满足简单条件的记录,对某一记录进行简单的更改,或单纯显示满足简单条件的记录,在这种方式下,除了查询操作外,不生成记录集就能完成所需的操作。本节只讨论这种方式。,1打开数据库,在使用控制面板建立好ODBC数据源后,就可以使用“Server.CreateObject”建立一个数据库连接对象,形式如下:Set Conn=Server.CreateObject(“ADODB.Connection”)其中:Conn为连接对象变量名,Server为系统内置的服务器对象。,1打开数据库,通过连接对象的“Open”方法打开数据库,形式如下:Conn.Open“DSN=数据源名称;UID=sa;PWD=;”其中:数据源名称即建立ODBC数据源时给出的名称,如:Conn.Open“DSN=TXL;UID=sa;PWD=;”UID后指出用户标识,sa是Access数据库中的缺省用户,PWD后面指出用户sa的口令,Access中用户sa的默认口令为空,所以直接用分号。,1打开数据库,在SQL Server中一般要求为用户sa设置口令,若设有口令,则在格式中应写出口令。在Access数据库中,当使用缺省的用户sa时,可以将连接对象的打开操作简写为如下形式:连接对象变量名.Open“数据源名称”而对于SQL数据库环境,连接对象的“Open”方法需要指出完整的参数。,不设置ODBC打开Access数据库,Set Conn=Server.CreateObject(“ADODB.Connection”)Conn.open Provider=Microsoft.Jet.OLEDB.4.0;DataSource=mydb.mdb;UserId=sa;Password=;其中:mydb.mdb为当前目录中的数据库,sa为用户名,口令为空。,打开SQL Server数据库,set conn=server.createobject(adodb.connection)conn.open PROVIDER=MSDASQL;DRIVER=SQL Server;SERVER=(local);DATABASE=cyq;UID=sa;PWD=;,2执行SQL语句,可以通过(上面创建的)连接对象的“Exceute”方法来执行一条SQL语句,以实现对数据库的操作,如下所示:Set RS=Conn.Execute(SQL语句)这里的“SQL语句”可以是任何一条语句,Conn是已创建并打开的数据库连接对象名。这条指令建立了一个RecordSet(记录集)对象RS,通过这一对象,可实现显示数据库记录内容。,2执行SQL语句,由于除查询操作外不生成结果记录集,所以对于像删除、修改或插入操作,可以使用如下形式:Conn.Execute(SQL语句)即不返回记录集。,3显示结果,刚生成的记录集是自动打开的,记录指针指向第一条记录,假设记录集变量名为RS,则可以使用如下各种形式获得数据:RS(“字段名”)=读取当前记录中指定字段的值 RS(i)=当前记录中第i个字段的值RS(i).Name=第i个字段的名称(I从0开始)RS.Fields.Count=当前记录集的字段总数,3显示结果,显示完当前记录内容后,可使用以下方式移动记录指针:RS.MoveFirst 将数据指针指向第一个记录RS.MoveLast 将数据指针指向最后一个记录RS.MoveNext 将数据指针指向下一个记录RS.MovePrev 将数据指针指向前一个记录 使用RS.EOF判别记录是否结束。一般情况,在开始显示前应首先用它来判别记录集是否为空。,4关闭数据库,在所有操作和显示结束后,需要使用下述指令关闭记录集和数据库连接:RS.Close Conn.Close 由于Access数据库同时只能维持一个连接,如果用户不关闭连接,将使其它用户无法打开它。,注意次序,5释放对象,可以使用如下形式来释放对象所占的资源:Set RS=nothing Set Conn=nothing,使用例子,例1:显示通讯录中全部记录网页内容全部人员名单如下:姓名爱好,建立连接,并打开,选择全部记录,使用例子,例1:显示通讯录中全部记录网页内容(续)objRS.MoveNext Wend objRS.close:objConn.close Set objRS=Nothing Set objConn=Nothing%,关闭并撤消记录集,关闭并撤消连接,依次显示个记录内容,例1:显示通讯录中全部记录,浏览结果,为了得到如图结果,需要完成以下工作:,例1:显示通讯录中全部记录,准备工作为了测试本例的结果,需要首先通过某种数据库环境来建立数据库及数据表,数据表(名为txlb)中包含“姓名”、“性别”、“出生日期”、“联系电话”和“爱好”五个字段,出生日期为日期/时间类型,其它均为文本类型。在表中输入若干个记录,为便于验证以后各例的结果,输入内容可参照表10-2中的数据。,例1:显示通讯录中全部记录,准备工作通过控制面板,设置名为“txl”的系统DNS,指向建立的数据库。本例代码必须小心输入,任何错误都是致命的。如果你使用的是Windows 2000操作系统的话,还要设置使用不是默认的缓冲输出方式。,在Internet信息服务管理器窗中,右击默认Web站点,选择属性。,例1:显示通讯录中全部记录,在属性对话框的主目录选项卡中单击配置。,点击测试,在应用程序配置对话框的应用程序选项卡中关闭“启用缓冲”复选框。,使用例子,例2:插入一条静态记录 网页内容插入完成,在SQL Server数据库中,改为99-11-12,建立连接,并打开,关闭并撤消连接,实现插入,例2:插入一条静态记录,本例作用为:在数据表txlb中插入一条已知记录,其中姓名为“李想”,性别为“女”,出生日期为“89-11-18”,联系电话为“”,爱好为“音乐”。本例完成后可用上例查看结果。,执行本例,执行上例查看结果,使用例子,例3:将表单中的输入插入到数据表中 网页结构0 then 获得表单内容,构造SQL语句,实现插入 else 显示表单,等待输入end if%,是否有表单输入,变量声明,例3:将表单中的输入插入到数据表中,获得表单内容,构造SQL语句,实现插入 Set objConn=Server.CreateObject(ADODB.Connection)objConn.Open txl strQ=INSERT INTO txlb(姓名,性别,出生日期,联系电话,爱好)VALUES strQ=strQ&(&request(xm)&,&request(xb)&,#strQ=strQ&request(csrq)&#,&request(lxdh)&,“strQ=strQ&request(ah)&)objConn.Execute strQ objConn.close Set objConn=Nothing%插入完成,实现插入,建立连接,并打开,关闭并撤消连接,例3:将表单中的输入插入到数据表中,显示表单,等待输入添加记录姓名:性别:出生日期:联系电话:爱好:,表单发送到自己,例3:将表单中的输入插入到数据表中,浏览结果,单击测试本例,注意:表单中输入内容时不能空缺。,例3:将表单中的输入插入到数据表中,验证本例为验证本例先用“response.write strQ”代替“objConn.Execute strQ”,并插入一条“response.end”,观察生成的SQL语句的正确性。当你在表单中输入如上图的数据时,正确的SQL语句应该如下:INSERT INTO txlb(姓名,性别,出生日期,联系电话,爱好)VALUES(张三,男,#90-03-12#,0519-1234567,胡闹)当正常插入后,使用第1个例子的脚本检查添加的正确性。,执行前例查看结果,使用例子,例4:删除一些满足条件的记录网页结构0 then 接受表单输入,完成删除操作 else 显示表单,等待输入end if%,变量声明,判断条件是否已经输入,例4:删除一些满足条件的记录,显示表单,等待输入删除记录 method=POST 姓名:性别:爱好:,表单发送到自己,例4:删除一些满足条件的记录,接受表单输入,完成删除操作 Set objConn=Server.CreateObject(ADODB.Connection)objConn.Open txl strQ=DELETE FROM txlb if request.form(xm)then 获得输入的姓名,形成SQL字符串,实现删除操作 elseif request(xb)and request(ah)then 获得输入的性别和爱好,形成SQL字符串,实现删除操作 else 显示没有按要求选择要删除的记录 end if objConn.close Set objConn=Nothing,表单中输入了姓名,建立连接,并打开,表单中输入了性别和爱好,关闭并撤消连接,例4:删除一些满足条件的记录,获得输入的姓名,形成SQL字符串,实现删除操作 strQ=DELETE FROM txlb strQ=strQ&WHERE 姓名 Like%&request.form(xm)&%objConn.Execute strQ response.write 删除完成,采用模糊查询,获取表单中输入的姓名,例4:删除一些满足条件的记录,获得输入的性别和爱好,形成SQL字符串,实现删除操作 strQ=DELETE FROM txlb strQ=strQ&WHERE 性别=&request(xb)&AND 爱好=strQ=strQ&request(ah)&objConn.Execute strQ response.write 删除完成,获取表单中输入的性别,获取表单中输入的爱好,例4:删除一些满足条件的记录,浏览结果本例中实现了删除姓名中包含某些特定符号的人员,或删除指定性别并且具有指定爱好的人员。输入形式有如下两种:,单击这里运行本例,单击这里查看结果,使用例子,例5:通过选择来删除记录网页结构,获得脚本文件名,建立连接,并打开,没有选定记录时,关闭并撤消连接,例5:通过选择来删除记录,显示全部记录,并舔加删除该记录的超连接 Set RS=objConn.Execute(SELECT 姓名,性别 FROM txlb)do while not RS.EOF response.write&RS(姓名)&RS(性别)response.write 删除 RS.movenext loop RS.close set RS=nothing,获得所有记录,建立超连接,把姓名作为参数,关闭并撤消记录集,例5:通过选择来删除记录,删除选择的记录,并提供选择下一个记录的超连接 sqlstr=delete from txlb where 姓名=&request(xm)&objConn.execute(sqlstr)response.write 删除完成 response.write 继续删除其它记录,执行删除操作,根据姓名形成SQL语句,提供超连接,例5:通过选择来删除记录,浏览结果,单击这里测试本例,使用例子,例6:更改某一记录,将“李梦”的性别改为“女”,联系电话改为“0519-4373633”。网页内容,建立连接,并打开,按指定要求完成对表的修改,关闭并撤消连接,例6:更改某一记录,浏览结果本例浏览无显示,执行后可通过执行例1来观察,运行本例,运行例1,观看结果,使用例子,例7:通过表单输入修改内容,建立连接,并打开,是否输入了新内容,关闭并撤消连接,例7:通过表单输入修改内容,显示记录供选择,选择后显示表单供输入新内容if request.servervariables(QUERY_STRING)=then 显示全部记录,并舔加修改该记录的超连接Else 读取所选择记录,作为初始内容显示表单 end if,是否已经指定记录,例7:通过表单输入修改内容,显示全部记录,并舔加修改该记录的超连接 Set RS=Conn.Execute(SELECT 姓名,性别 FROM txlb)response.write 请选择要修改的记录 do while not RS.EOF response.write&RS(姓名)&RS(性别)&response.write 修改 RS.movenext loop RS.close set RS=nothing,获得所有记录,建立超连接,把姓名作为参数,关闭并撤消记录集,例7:通过表单输入修改内容,读取所选择记录,作为初始内容显示表单 Set RS=Conn.Execute(SELECT*from txlb where 姓名=&request(xm)&)%请输入新的内容 method=POST 姓名:性别:联系电话:%RS.close:set RS=nothing,获得指定姓名的记录,把姓名作为参数用隐藏对象传送,关闭并撤消记录集,例7:通过表单输入修改内容,浏览结果首先显示如图,例7:通过表单输入修改内容,浏览结果选择记录后显示如图,例7:通过表单输入修改内容,浏览结果最后显示如图,验证本例,10.5 通过记录集对象使用数据库,在上一节我们已经讨论了在连接对象上执行SQL语句完成对数据库的操作。但当这种方法用于完成复杂的操作时,需要构造一个复杂的SQL语句,非常困难,容易写错;另一方面,创建的记录集不能直接用于修改、删除或更新操作,使用不方便。为此,本节讨论第二种方式,创建独立的记录集对象。,10.5 通过记录集对象使用数据库,通过创建记录集进行数据库操作的基本步骤如下:1打开数据库 2创建记录集对象并打开其实例 3操作记录集 4关闭记录集和连接,1打开数据库,在使用ODBC建立好一个数据源后,就可以使用“Server.CreateObject”建立一个数据库连接,并通过该连接的“Open”方法打开该数据库,如下所示:Set Conn=Server.CreateObject(ADODB.Connection)Conn.Open DNS_Name其中,DNS_Name为已经建立的ODBC数据源名称,如TXL。,2创建记录集对象并打开其实例,通过服务器对象的CreateObject可创建记录集对象。形式如下:Set objRS=Server.CreateObject(ADODB.Recordset)其中:objRS表示记录集变量名,为了方便表示,以后叙述中也用它表示记录集变量。ADODB.Recordset表示要创建的是ADODB中的Recordset对象。,2创建记录集对象并打开其实例,再通过该对象的Open方法来打开一个记录集实例,格式如下:objRS.Open 数据源,连接名称,游标类型,锁定方式,数据源类型各参数也可通过直接对相应属性的赋值来实现。使用如下形式:objRS.Source=数据源 objRS.ActiveConnection=连接名称 objRS.CursorType=游标类型 objRS.LockType=锁定方式 objRS.CursorLocation=游标位置 objRS.Open,2创建记录集对象并打开其实例,其中:(1)数据源(Source)可以是一个SQL语句或一个表的名称,当然也可以是一个Command对象或者一个存储过程。(2)活动连接(ActiveConnection)设定一个RecordSet对象与哪一个连接对象相关,即创建的记录集与哪个数据库相关。,2创建记录集对象并打开其实例,(3)游标类型(CursorType)它反映了所需创建的记录集应具有的操作特性。一般有四种值:adOpenForwardOnly:称为向前游标。adOpenStatic:称为静态游标。adOpenDynamic:称为动态游标。adOpenKeyset:称为关键游标。,游标类型(CursorType),adOpenForwardOnly:称为向前游标,即作为记录指针的游标只能往前移动(向记录号大的方向)。对于具有这种类型游标的记录集,不能求记录的总条数和记录的页数。,游标类型(CursorType),adOpenStatic:称为静态游标,它能向前或向后移动,也能求记录的总条数和页数,但和向前游标一样,具有这种游标的记录集只是原记录集的静态副本,当其他用户对记录进行修改、删除或添加时,并不自动地更新这些记录集。,游标类型(CursorType),adOpenDynamic:称为动态游标,当其它用户对记录集进行改变、删除或添加新记录后,能自动地反映到本记录集中。,游标类型(CursorType),adOpenKeyset:称为关键游标,只有当其他用户对记录集做改变或删除动作时才自动更新本记录集,而当其它用户做添加新记录操作时不进行自动更新。其它用户对本用户记录集的影响只有当多个用户并发访问数据库时才会发生,它对于网页的设计影响不大。,2创建记录集对象并打开其实例,(4)LockType指明当打开一个记录集(RecordSet)时,对编辑中的记录的锁定方式,一旦记录被某一用户锁定,其它用户就不能同时进行读或写该记录。该属性一般可以有下述四种取值:adLockBatchOptimistic:执行成批修改时才锁定记录。adLockOptimistic:当执行Update方法时,才锁定记录。adLockPessimistic:开始编辑数据时就锁定记录。adLockReadOnly:数据不能改变(缺省值)。,2创建记录集对象并打开其实例,(5)记录源类型的两种标识分别为adCmdTable(表)和adCmdText(SQL语句)。(6)打开记录集前,通常还需要指定游标所在的位置,它有两个可选的值,即服务器游标adUesServer和客户端游标adUseClient。服务器游标包含在数据库中,而客户端游标包含在OLE DB接口中。以上各常量名的说明包含在文件“adovbs.inc”中。读者可以从“Program FilesCommon FilesSystemado”中找到该文件,并把它复制到网页文件所存放的目录中,其后你可以象例中那样把该文件包含到网页中。,3操作记录集,打开记录集后,可以使用记录集上的有关方法来操作记录集,主要有:AddNew 向一个可更新的RecordSet对象中增加一条记录。Delete 删除一个RecordSet对象的当前记录。Update 把对打开的RecordSet对象数据的变动存储到数据库。CancelUpdate 取消对数据表所做的变动。,3操作记录集,另外可以使用赋值的形式改变当前记录的某一字段值。形式如下:记录集变量名(“字段名”)=值同样可以用以下方法移动记录指针:Move 在RecordSet对象中移动当前记录指针。MoveFirst 移动当前记录指针到记录集的首记录。MoveLast 移动当前记录指针到记录集的末记录。MoveNext 移动记录指针到当前记录的下一条记录。MovePrevious 移动记录指针到当前记录的下一条记录。,4关闭记录集和连接,使用记录集和连接的关闭方法(Close)可关闭记录集和连接,形式如下:记录集变量名.close连接变量名.close并可同样地释放其所占的资源,形式如下:Set 记录集变量名=NothingSet 连接变量名=Nothing,使用举例,例8:记录的显示和添加网页结构变量声明,创建连接和记录集If(Request.ServerVariables(CONTENT_LENGTH)0)Then 获取表单数据,并添加到数据表中End If显示数据表中的全部记录提供一个输入新记录的表单,例8:记录的显示和添加,变量声明,创建连接和记录集%Dim objConn,objRS,strOutDim strXM,strDhSet objConn=Server.CreateObject(ADODB.Connection)objConn.Open txlSet objRS=Server.CreateObject(ADODB.Recordset),嵌入常量说明文件,创建记录集对象,建立连接,并打开,例8:记录的显示和添加,获取表单数据,并添加到数据表中strXM=Left(Trim(Request.Form(xm),40)If Len(strXM)0 Then objRS.CursorLocation=adUseServer objRS.Open txlb,objConn,adOpenKeyset,adLockOptimistic,adCmdTable objRS.AddNew objRS(姓名)=strXM strDh=Left(Trim(Request.Form(lxdh),24)If Len(strDh)0 Then objRS(联系电话)=strDh End If,取姓名前40个符号,添加记录,打开记录集,保存姓名,保存联系电话,例8:记录的显示和添加,获取表单数据,并添加到数据表中(续)If isdate(Request.Form(csrq)then objRS(出生日期)=Request.Form(csrq)end if If Request.Form(xb)then objRS(性别)=request.Form(xb)If Request.Form(ah)then objRS(爱好)=request.form(ah)objRS.Update objRS.CloseElse Response.Write 请提供你的姓名!End If,保存出生日期,更新记录集,保存性别,保存爱好,关闭记录集,例8:记录的显示和添加,显示数据表中的全部记录objRS.CursorLocation=adUseClientobjRS.CursorType=adOpenForwardOnlyobjRS.LockType=adLockReadOnlyobjRS.Open SELECT*FROM txlb,objConn,adCmdText%姓名爱好,设置客户端游标,打开记录集,设置记录只读,显示标题行,设置向前游标,例8:记录的显示和添加,显示数据表中的全部记录 objRS.MoveNextWendobjRS.close:objConn.closeSet objRS=Nothing:Set objConn=Nothing,关闭和释放记录集和连接,显示各个记录,例8:记录的显示和添加,提供一个输入新记录的表单 METHOD=POST姓名:性别:出生日期:联系电话:爱好:,发送到自身,例8:记录的显示和添加,本例在执行时首先显示如图所示。,例8:记录的显示和添加,当在表单中输入如图的内容后,单击表单,例8:记录的显示和添加,显示形式如图所示。,可以看出,记录已经添加进去了。,验证本例,使用举例,例9:修改数据,将“李梦”的联系电话从7位升至8位,规则是在前面加上原来的最高位。网页内容脚本改变表中的联系电话,嵌入常量说明文件,建立连接,并打开,例9:修改数据,网页内容(续)%Set objRS=Server.CreateObject(ADODB.Recordset)objRS.CursorLo