收藏 分享(赏)

第13章 Recordset对象-存取数据库的对象.ppt

上传人:mcady 文档编号:7015782 上传时间:2019-05-01 格式:PPT 页数:60 大小:607KB
下载 相关 举报
第13章 Recordset对象-存取数据库的对象.ppt_第1页
第1页 / 共60页
第13章 Recordset对象-存取数据库的对象.ppt_第2页
第2页 / 共60页
第13章 Recordset对象-存取数据库的对象.ppt_第3页
第3页 / 共60页
第13章 Recordset对象-存取数据库的对象.ppt_第4页
第4页 / 共60页
第13章 Recordset对象-存取数据库的对象.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

1、第十三章 Recordset对象存取数据库的对象,在ASP中,用来存取数据库的对象统称为ADO(ActiveX Data Object),主要含有Connection、Recordset和Command三种对象。 Connection对象:负责连接、打开数据库 Recordset对象:存取数据库的内容 Command对象:对数据库下达行动查询指令,13-1 存取数据库的准备工作,要让ADO对象能够存取数据库,最重要的东西就是ODBC驱动程序。 ODBC:Open DataBase Connectivity 对任何一种数据库来说,必须具备其对应的ODBC驱动程序,ADO对象才能够进行存取。,应用

2、程序,应用程序,应用程序,ADO对象,Dbase驱动程序,Access驱动程序,SQL Server驱动程序,Dbase数据库,Access数据库,SQL Server数据库,1.ODBC数据源管理器,控制面板管理工具ODBC数据源驱动程序,2.ACCESS数据库,(1)创建数据库 (2)使用设计器创建表 (3)录入数据 (4)建立关联,主键:确定数据库中的表的记录的唯一标识字段,可以是表中的一个字段,也可以是表中的多个字段组成的(复合主键)。 主键字段不可为空,也不可以重复 如:学生表中的学号 外键:相对于主键而言的 如另有一张成绩表,表中也出现了学生表中的对应学号字段,则相对于学生表,学号

3、就是成绩表的外键,(5)ACCESS数据库安全性措施,.mdb文件的安全隐患:容易被下载 解决方法:将文件名的后缀改为.asa或.asp,asp会自动识别,且无法被下载 如:数据库student.mdb,改为:student.asa或student.asp,(6)数据库的设计原则(三范式),第一范式:如果一个关系R的每一个属性都是不可分解的,则称R是满足第一范式(1NF)的。 例如: 学生表(学号,姓名,性别,出生日期,系名,入学时间,家庭成员) 这个关系(表)不满足第一范式,原因是因为“家庭成员“这个属性可以再分解(父亲,母亲等)。解决的办法是将这个表分解成如下两张表: 学生表(学号,姓名,

4、性别,出生日期,系名,入学时间) 家庭表(学号,家庭成员姓名,亲属关系),第二范式:在满足第一范式的基础上,如果关系R的任何一个非主键都依赖于主键,则称该表满足第二范式。 例如:成绩表(学号,课程号,出生日期,成绩) 在这个表中,每一条记录由学号+课程号唯一确定。学号+课程号为此表的复合主键。 但是在这个表中,出生日期只是依赖于学号变化,不是依赖于学号+课程号,所以不满足第二范式。 第二范式又称为部分依赖问题(一定是复合主键),即非主键对复合主键的部分依赖。 解决办法:拆分为两表 成绩表(学号,课程号,成绩) 学生表(学号,出生日期),第三范式:在满足第二范式的基础上,表中非主键列互不依赖,那

5、么就满足第三范式。 例如:学生表(学号,姓名,系编号,系名) 这个表中,让学号做主键,由于学号不是复合主键,因此一定不会产生对主键部分依赖的问题,所以是满足第二范式的。但是由于系名依赖于非主键系编号,所以不满足第三范式。 解决办法: 学生表(学号,姓名,系编号) 系名表(系编号,系名),3.访问数据库的过程,(1)建立Connection对象 set conn=server.createobject(“adodb.connection“)(2)连接数据库 conn.open “Provider=Microsoft.jet.oledb.4.0;Data Source=” & Server.Map

6、Path(“sample.mdb”),(3)建立Recordset对象 set rs=server.createobject(“adodb.recordset“)(4)打开数据表 rs.open “成绩单“,conn,cursor,locktypecursor为游标参数,实际应用中的值为0、1、2、3 Locktype为锁定参数,实际应用中的值为1、2、3,cursortype,0 :adOpenForwardOnly,缺省值,启动一个只能向前移动的游标(Forward Only)。 1:adOpenKeyset,启动一个Keyset类型的游标。用户对记录做的修改将反映到记录集中,但用户增加或

7、删除记录不会反映到记录集中。支持分页 2:adOpenDynamic,启动一个Dynamic类型的游标。在打开数据表时,只是打开一部分记录,随着程序的执行,再打开后面的记录; 3:adOpenStatic,启动一个Static类型的游标。具有定位功能的,一次打开全部记录,所占的内存较多,浪费系统资源,打开数据表时间也相对较长,locktype,1:adLockReadOnly,缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法 2:adLockPrssimistic,当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。 3:ad

8、LockOptimistic,当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。,(5)数据库连接的关闭,在对数据库所有的操作完毕后,应当及时关闭connection对象,释放资源 Conn.close Set conn=nothing Set rs=nothing,13-2 使用Recordset对象读取数据库,读取数据表表头 读取数据内容 改变当前数据记录的方法,例子:first00.asp改进:,1.读取数据表表头,第N个字段的表头为rs(N).Name(N从0开始算起)例:first01.asp,在不知道表的字段个数情况下,如何正确的列出所有字段

9、的表头呢?rs.fields.count:读取字段个数For i=0 to rs.fields.count-1 读取表头也可表示为: rs.fields(N).name 例:First02.asp,2.读取数据内容,当打开某一个数据表时,当前数据记录位于第一项的位置,此时只能读取这个数据记录的数据,数据表示方法如下图,rs(0)表示当前数据记录的第一项数据,第N项数据为rs(N),N从0开始,读取数据的方法: 读取数据的第二种方法:Rs.fields(N).value N从0开始,rs(“字段名称”),读取数据的第三种方法:,3.改变当前数据记录的方法,MoveNext方法:将当前数据记录移到

10、下一项。 MovePrevious:移到上一项 MoveFirst:移到第一项 MoveLast:移到最后一项 BOF属性:若为True,表示当前数据记录指针超过了第一项数据记录 EOF:若为True,表示当前数据记录指针超过了最后一项数据记录 例子:Firstdb.asp,用表格显示数据记录,小结,1.访问数据库的步骤 2.读取表头: rs(N).namers.fields(N).name 3.读取数据: rs(N)rs.fields(N).valuers(“字段名称”) 4.读取全部记录:whilewend语句,练习,练习:写一网页,打开sample.mdb数据库的“股票行情表”,要求只列

11、出“成交量”大于20000的数据记录。 想一想:如何能实现数据内容的分页显示?,13-3 定位式的数据读取,要读取第100项数据,怎么办?设置AbsolutePosition属性:rs.absoluteposition=100 定位功能实现:cursor类型设为3 3:adOpenStatic ,启动一个static类型的游标,具有定位功能的,一次打开全部记录,所占的内存较多,浪费系统资源,打开数据表时间也相对较长,分页的几个重要参数,rs.pagesize:每页显示的记录数 Rs.pagecount:总页数 Rs.absolutepage:某一页,Pagev1.asp,显示记录的某一页Rs.

12、pagesize=10rs.AbsolutePage = 1For iPage = 1 To rs.PageSizeResponse.Write “For i=0 to rs.Fields.Count-1Response.WRITE “ & rs(i) & “NextResponse.Write “rs.MoveNextIf rs.EOF Then Exit ForNext,Pagev2.asp,可输入页码的需要对获取的页数page转换 Rs.pagesize=10 page=request(“page“) if page“ thenpage=cint(page) elsepage=1 end

13、 if rs.absolutepage=page,Pagev3.asp,消除bug Rs.pagesize=10 page=request(“page“) if page“ thenpage=cint(page)if pagers.pagecount then page=rs.pagecount elsepage=1 end if rs.AbsolutePage = page,Pagev4.asp,对“上、下页”的显示方法1 Then 如果不是位于第一页%?Page=1第一页?Page=上一页rs.PageCount Then 如果不是位于最后一页 %?Page=下一页?Page=最后一页 ,

14、Pagev5.asp,带有输入文本框的分页Method=“GET”,Pagev6.asp,显示记录序号 RecNo = (Page - 1) * rs.PageSize + iPage Response.Write “ & RecNo & “,13-4 数据记录的增添、删除与修改,删除数据记录:首先要将准备删除的数据记录设置成当前数据记录,然后调用rs.delete方法。例子:delete.asp 修改数据记录:修改以后只是把数据写到了缓冲区,必须调用Update方法或改变当前数据记录的位置才真正写入数据库。 rs.(“字段名“)=新的字段值 rs.update 例子:Modify.asp 增

15、添数据记录:rs.addnew。rs.addnew rs(“字段名“)=字段值 rs.update 例子:addnew.asp,13-5 可以进行数据筛选与排序的Select指令,Firstdb.asp替换成select.asp。结果不变。 SQL是“Structured Query Language”结构化查询语言的缩写,是用于对存放在计算机数据库中的数据进行组织、管理和检索的一种工具。 查询是SQL语言的核心,而用于表达SQL查询的Select语句则是功能最强也最为复杂的SQL语句。它从数据库中检索数据,并将查询结果提供给用户。 使用testsel.asp测试select指令,基本句型一:

16、Select 字段列表 From 数据表,Select * from 成绩单 注:其中*表示“成绩单”数据表所有字段所构成的列表,所以上面的指令也等于: Select 学号,姓名,语文,英文,数学 from 成绩单 注:凡是数据表中的字段都可以成为“字段列表”的一员。字段的顺序可以自定义,不必与数据表中的字段顺序相同。 Select 字段名1 As 别名1,字段名2 As 别名2 from 成绩单 Select 字段名1,字段名2,字段名1+字段名2 as 字段名3 from 成绩单,Select * from 成绩单 where 数学60 注:从成绩单中取出数学不及格的同学 Select *

17、 from 成绩单 where 语文=0 or 数学=0 or 英文=0 注:取出语文、英文、数学任何一门为0分的学生。,基本句型二:Select Fromwhere 条件式,Where 条件表达式,关系运算符:、=、!=(不等于,或者用“”表示) 逻辑运算符:And、OR、NOT 特殊运算符: :通配符,表示零或多个字符 _:通配符,表示任何一个字符 Between:定义一个区间范围 IS NULL:测试字段值是否为空值 Like:字符串匹配操作 IN:检查一个字段值是否属于一组之中 Exists:检查一个字段值是否有值,字符串数据 下面2种写法都正确 Select * from 成绩单 w

18、here 姓名=“叶小毛” Select * from 成绩单 where 姓名=叶小毛 通配符 %、_ %:代表0N个字符 Select * from 成绩单 where 姓名 like 王% 注:查找所有姓王的同学的数据记录。 Select * from 成绩单 where 姓名 like %小% 注:查找姓名中含有“小”的数据记录。 _:代表一个字符 select * from 成绩单 where 姓名 like _小% 选取姓名中第二个字为“小”字的同学,Between and Select * from 学生表 where 年龄 between 18 and 20 注:列出年龄在18

19、-20之间的学生 思考:列出年龄不在18-20之间的学生? IS NULL Select 课程名 from 课程表 where 先修课 IS NULL 注:列出没有先修课的课程名 IN Select 学号,姓名,性别,院系 from 学生表 where 院系 IN (计算机,国际贸易) 注:列出计算机系和国际贸易系学生的学号、姓名、性别、院系 如何列出不是电子系,也不是会计系的学生记录?,DISTINCT的作用:避免重复的记录 如: Select Distinct 教师名 from 授课表,Select * from 成绩单 order by 语文 注:order by默认的排序方式是由小到大

20、。 下面将成绩单中的数据按语文成绩由高到低取出: Select * from 成绩单 order by 语文 desc Select * from 成绩单 where 语文60 order by 语文 注:order by 可以和Where条件式结合,此时,order by 必须放在where条件式的后面。,基本句型三:Select Fromorder by 字段列表,级联排序:按顺序列出字段的清单,字段之间用逗号隔开 Select 入学年份,学号,姓名 from 学生表 order by 入学年份 desc, 学号,在程序中组合条件式,以上所举的都是“常数”例子,如果比较的数据是“变量”,那

21、么如何做呢? V=200SQL=“select * from 股票行情表 where 收盘价V”set rs=server.createobject(“adodb.recordset”)rs.open SQL,conn,3,2 结果是错误的,因为V对程序而言是一个变量,但是对于数据库而言,却是一个不认识的东西。所以必须把V输出为常数,然后串在条件式中,才是正确的。,对于数字 例子:var1.asp SQL=“select * from 股票行情表 where 收盘价”&V 对于字符串 例子:var2.asp SQL=“select * from 股票行情表 where 股票代号=”&V&” 对

22、于日期时间 例子:var3.asp SQL=“select * from 买卖记录 where 买卖日期=#”&V&”#” 例:pagev7.asp pagev8.asp,SQL的集合函数,Count:统计 MIN:求最小值 MAX:求最大值 AVG:求平均值 SUM:求总和,COUNT,用作计数器,统计满足条件的记录数 Select count(*) as 个数 from 学生表 where 性别=女 and 年龄=19 注:统计19岁以上的女同学人数 练习:列出授课表中有多少位教师 Select count(Distinct 教师名) as 教师人数 from 授课表 注意:与distin

23、ct合用,MAX和MIN,例:找出年龄最大和最小的学生年龄 Select Max(年龄) as 最大年龄, Min(年龄) as 最小年龄 from 学生表例:查询选修“C801”课程的学生最高分 Select Max(成绩) as 最高分 from 成绩表 where 课程号=C801,AVG函数与SUM函数,例:求出所有学生的平均年龄 Select AVG(年龄) as 平均年龄 from 学生表例:列出所有学生的年龄总和 Select SUM(年龄) as 年龄总和 from 学生表练习:列出所有女生的年龄总和,Group by对查询结果分组,例:统计每一届学生的人数 Select 入学

24、年份,count(*) as 每届人数 from 学生表 group by 入学年份例:列出各个课程号及相应的选修人数 Select 课程号,count(课程号) from 成绩表 group by 课程号,基于多表的查询,自然连接 复合条件连接 嵌套查询 带有IN的子查询,自然连接,等值连接:连接条件中运算符是“=” 非等值连接:运算符是、=、=、!= 例:列出每个学生及其选修课程的详细清单 Select 学生表.*, 成绩表.* from 学生表,成绩表 where 学生表.学号=成绩表.学号,复合条件连接,例:列出选修了“C801”课程并且成绩在90分以上的所有学生清单 Select 学

25、生表.学号,姓名,性别,年龄,院系,班级名 from 学生表 where 学生表.学号=成绩表.学号 and 课程号=C801 and 成绩90,嵌套查询,例:查询“沈香娜”同学所在班级的所有学生名单 Select 学号,姓名,性别,年龄,院系,班级名 from 学生表 where 班级名=(select 班级名 from 学生表 where 姓名=沈香娜),带有IN的子查询,例:列出与“刘成凯”同学在同一个系的所有女生的名单 Select 学号,姓名,性别,年龄,院系,班级名 from 学生表 where 院系 IN (select 院系 from 学生表 where 姓名=刘成凯) and

26、 性别=女,练习,建立一Access数据库student.mdb,数据表名称为stumanage,字段如下: 学号(文本) 姓名(文本) 性别(文本) 年龄(数字) 班级(文本) 专业(文本) 编程实现以下要求: 1、实现分页浏览功能 2、实现任意项的修改、删除功能 3、统计出男生、女生的人数各为多少 4、显示时按照年龄递增排序,作业,自己制作一个个人留言板,要求如下: 用户留言界面 用户查看留言界面 留言管理界面:回复、修改、删除,作业,1.数据库设计应该遵循哪些原则? 2.访问数据库的过程是怎样的?代码如何编写? 3.如何读取数据表的表头、记录内容? 4.如何改变数据记录指针? 5.如何实现数据记录的分页显示? 6.删除、修改、添加记录的方法? 7.基本的三种SQL语句格式?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 数据库

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报