第10章 Recordset对象-存取数据库的对象

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学生表(学号,姓名,系编号) 系名表(系编号,系名)
3.Connection对象的建立与数据库的连接
„建立Connection对象 set conn=server.createobject("adodb.connection")
Provider="Provider=Microsoft.jet.oledb.4.0;" DBpath=“Data Source=”&Server.MapPath(“sample.mdb”) „连接数据库 conn.open Provider&DBpath
Pagev1.asp
显示记录的某一页 Rs.pagesize=10 ShowOnePage rs, 1





Sub ShowOnePage( rs, Page ) Response.Write "<CENTER><TABLE BORDER=1>" Response.Write "<TR BGCOLOR=#00FFFF>" Response.Write "<TD>编号</TD>" For i=0 to rs.Fields.Count-1 Response.Write "<TD>" & rs(i).Name & "</TD>" Next Response.Write "</TR>" rs.AbsolutePage = Page For iPage = 1 To rs.PageSize Response.Write "<TR>" RecNo = (Page - 1) * rs.PageSize + iPage Response.Write "<TD>" & RecNo & "</TD>" For i=0 to rs.Fields.Count-1 Response.WRITE "<TD>" & rs(i) & "</TD>" Next Response.Write "</TR>" rs.MoveNext If rs.EOF Then Exit For Next Response.Write "</TABLE></CENTER>" End Sub
使用字段名称读取数据

rs(“字段名称”)
练习


练习1:写一网页,打开sample.mdb数据库的 “股票行情表”,要求只列出“成交量”大于 20000的数据记录。 练习2:写一网页,打开sample.mdb数据库的 “成绩单”数据表,除了显示“学号、姓名、 语文、数学、英文”字段外,还要计算“语文、 数学、英文”三科的总分数线,显示成“总成 绩字段”。

<TABLE BORDER=1> <TR BGCOLOR=#00FFFF> <% ' Part I输出“表头名称” For i=0 to rs.Fields.Count-1 Response.Write "<TD>" & rs(i).Name & "</TD>" Next %> </TR> <% ' Part II输出数据表的“内容” rs.MoveFirst ' 将目前的数据记录移到第一项 While Not rs.EOF ' 判断是否过了最后一项 Row = "<TR>" For i=0 to rs.Fields.Count-1 Row = Row & "<TD>" & rs(i) & "</TD>" Next Response.Write Row & "</TR>" rs.MoveNext ' 移到下一项 Wend %> </TABLE>
10-1 存取数据库的准备工作


要让ADO对象能够存取数据库,最重要的东西 就是ODBC驱动程序。 ODBC:Open DataBase Connectivity 对任何一种数据库来说,必须具备其对应的 ODBC驱动程序,ADO对象才能够进行存取。
应用程序
应用程序
应用程序
ADO对象
Dbase驱动程序
例子:first00.asp <% set conn=server.createobject("adodb.connection") Provider="Provider=Microsoft.jet.oledb.4.0;" DBpath=“Data Source=”&Server.MapPath(“sample.mdb”) conn.open Provider&DBpath set rs=server.createobject("adodb.recordset") rs.open "成绩单",conn,2,2 %> 改进:<!-- #include file="conn.asp" -->
Pagev2.asp
可输入页码的需要对获取的页数page转换 Page = CLng(Request("Page")) If Page < 1 Then Page = 1 If Page > rs.PageCount Then Page = rs.PageCount

读取数据表表头


第N个字段的表头为rs(N).Name(N从0开始算起) <% For i = 0 to 4 Response.Write "<Li>" & rs(i).Name Next %> 例:first01.asp


在不知道表的字段个数情况下,如何正确的列 出所有字段的表头呢? rs.fields.count:读取字段个数 For i=0 to rs.fields.count-1 例:First02.asp
改变当前数据记录的方法




MoveNext方法:将当前数据记录移到下一项。 MovePrevious:移到上一项 MoveFirst:移到第一项 MoveLast:移到最后一项 BOF属性:若为True,表示当前数据记录指针超过了 第一项数据记录 EOF:若为True,表示当前数据记录指针超过了最后 一项数据记录 例子:Firstdb.asp
cursortype



0 :adOpenForwardOnly,缺省值,启动一个只能向 前移动的游标(Forward Only)。 1:adOpenKeyset,启动一个Keyset类型的游标。用 户对记录做的修改将反映到记录集中,但用户增加或 删除记录不会反映到记录集中。支持分页 2:adOpenDynamic,启动一个Dynamic类型的游标。 在打开数据表时,只是打开一部分记录,随着程序的 执行,再打开后面的记录; 3:adOpenStatic,启动一个Static类型的游标。具有 定位功能的,一次打开全部记录,所占的内存较多, 浪费系统资源,打开数据表时间也相对较长
第十章 Recordset对象-存 取数据库的对象

在ASP中,用来存取数据库的对象统称为 ADO(ActiveX Data Object),主要含有 Connection、Recordset和Command三种 对象。


Connection对象:负责连接、打开数据库 Recordset对象:存取数据库的内容 Command对象:对数据库下达行动查询指令
Access驱动程序
SQL Server驱动程序
Dbase数据库
Access数据库
SQL Server数据库
1.ODBC数据源管理器

控制面板ຫໍສະໝຸດ Baidu管理工具-ODBC数据源-驱动程序
2.ACCESS数据库


(1)创建数据库 (2)使用设计器创建表 (3)录入数据 (4)建立关联
(5)ACCESS数据库安全性措施
locktype



1:adLockReadOnly,缺省值,Recordset对 象以只读方式启动,无法运行AddNew、 Update及Delete等方法 2:adLockPrssimistic,当数据源正在更新时, 系统会暂时锁住其他用户的动作,以保持数据 一致性。 3:adLockOptimistic,当数据源正在更新时, 系统并不会锁住其他用户的动作,其他用户可 以对数据进行增、删、改的操作。

4.访问数据库
„建立Recordset对象 set rs=server.createobject("adodb.recordset") „打开数据表,参数二为Connection对象 rs.open "成绩单",conn,cursor,locktype
cursor为游标参数,实际应用中的值为1、2、3
5.数据库连接的关闭


在对数据库所有的操作完毕后,应当及时关闭 connection对象,释放资源 Conn.close Set conn=nothing Set rs=nothing
10-2 使用Recordset对象读取数据库


读取数据表表头 读取数据内容 改变当前数据记录的方法 利用字段名称读取数据
10-3 定位式的数据读取



要读取第100项数据,怎么办?设置 AbsolutePosition属性: rs.absoluteposition=100 定位功能实现:cursor类型设为3 3:adOpenStatic ,启动一个static类型的游标, 具有定位功能的,一次打开全部记录,所占的 内存较多,浪费系统资源,打开数据表时间也 相对较长
.mdb文件的安全隐患:容易被下载 解决方法: 将文件名的后缀改为.asa或.asp,asp会自动识 别,且无法被下载 如:数据库student.mdb,改为:student.asa 或student.asp

(6)数据库的设计原则(三范式)





第一范式:如果一个关系R的每一个属性都是不可分 解的,则称R是满足第一范式(1NF)的。 例如: 学生表(学号,姓名,性别,出生日期,系名,入学 时间,家庭成员) 这个关系(表)不满足第一范式,原因是因为"家庭成员 "这个属性可以再分解(父亲,母亲等)。解决的办法是 将这个表分解成如下两张表: 学生表(学号,姓名,性别,出生日期,系名,入学 时间) 家庭表(学号,家庭成员姓名,亲属关系)
读取数据内容

当打开某一个数据表时,当前数据记录位于第 一项的位置,此时只能读取这个数据记录的数 据,数据表示方法如下图
rs(0)表示当前数据记录的第一项数据,第N项数据为 rs(N),N从0开始



读取数据的方法: <% For i= 0 to rs.Fields.Count - 1 Response.Write "<Li>" & rs(i).Name & " = " & rs(i) Next %> 说明:(1)rs(i).Name:读取第i栏的字段表头(i从0 开始) (2)rs(i):读取当前数据记录第i栏的数据内容 (i从0开始) (3)rs.fields.count:读取字段的数目 例:first03.asp






第二范式:在满足第一范式的基础上,如果关系R的 任何一个非主键都依赖于主键,则称该表满足第二范 式。 例如: 成绩表(学号,课程号,出生日期,成绩) 在这个表中,每一条记录由学号+课程号唯一确定。 学号+课程号为此表的复合主键。 但是在这个表中,出生日期只是依赖于学号变化,不 是依赖于学号+课程号,所以不满足第二范式。 第二范式又称为部分依赖问题(一定是复合主键),即 非主键对复合主键的部分依赖。 解决办法:拆分为两表
具备分页浏览功能的网页


Pagev1.asp:分页的技巧 Pagev2.asp:在地址栏中输入页次 Pagev3.asp:页次的浏览 Pagev4.asp:增加“输入页次”字段
分页的几个重要参数



rs.pagesize:每页显示的记录数 Rs.pagecount:总页数 Rs.absolutepage:某一页

成绩表(学号,课程号,成绩) 学生表(学号,出生日期)




第三范式:在满足第二范式的基础上,表中非 主键列互不依赖,那么就满足第三范式。 例如: 学生表(学号,姓名,系编号,系名) 这个表中,让学号做主键,由于学号不是复合 主键,因此一定不会产生对主键部分依赖的问 题,所以是满足第二范式的。但是由于系名依 赖于非主键系编号,所以不满足第三范式。 解决办法:
相关文档
最新文档