第13章 Recordset对象-存取数据库的对象.ppt
《第13章 Recordset对象-存取数据库的对象.ppt》由会员分享,可在线阅读,更多相关《第13章 Recordset对象-存取数据库的对象.ppt(60页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十三章第十三章 Recordset对象对象存取数据库的对象存取数据库的对象n在在ASP中,用来存取数据库的对象统称为中,用来存取数据库的对象统称为ADO(ActiveXDataObject),),主要含有主要含有Connection、Recordset和和Command三三种对象。种对象。qConnection对象:负责连接、打开数据库对象:负责连接、打开数据库qRecordset对象:存取数据库的内容对象:存取数据库的内容qCommand对象:对数据库下达行动查询指令对象:对数据库下达行动查询指令13-1 存取数据库的准备工作存取数据库的准备工作n要让要让ADO对象能够存取数据库,最重要的
2、东西对象能够存取数据库,最重要的东西就是就是ODBC驱动程序。驱动程序。nODBC:OpenDataBaseConnectivityn对任何一种数据库来说,必须具备其对应的对任何一种数据库来说,必须具备其对应的ODBC驱动程序,驱动程序,ADO对象才能够进行存取。对象才能够进行存取。应用程序应用程序应用程序应用程序应用程序应用程序ADO对象对象Dbase驱动程序驱动程序Access驱动程序驱动程序SQL Server驱动程序驱动程序Dbase数据库数据库Access数据库数据库SQL Server数据库数据库1.ODBC数据源管理器数据源管理器n控制面板管理工具控制面板管理工具ODBC数据源驱
3、动程序数据源驱动程序2.ACCESS数据库数据库n(1)创建数据库创建数据库n(2)使用设计器创建表使用设计器创建表n(3)录入数据录入数据n(4)建立关联建立关联n主键:确定数据库中的表的记录的唯一标识字主键:确定数据库中的表的记录的唯一标识字段,可以是表中的一个字段,也可以是表中的段,可以是表中的一个字段,也可以是表中的多个字段组成的(复合主键)。多个字段组成的(复合主键)。n主键字段不可为空,也不可以重复主键字段不可为空,也不可以重复q如:学生表中的学号如:学生表中的学号n外键:相对于主键而言的外键:相对于主键而言的q如另有一张成绩表,表中也出现了学生表中的对应如另有一张成绩表,表中也出
4、现了学生表中的对应学号字段,则相对于学生表,学号就是成绩表的外学号字段,则相对于学生表,学号就是成绩表的外键键(5)ACCESS数据库安全性措施数据库安全性措施n.mdb文件的安全隐患:容易被下载文件的安全隐患:容易被下载n解决方法:解决方法:将文件名的后缀改为将文件名的后缀改为.asa或或.asp,asp会自动会自动识别,且无法被下载识别,且无法被下载n如:数据库如:数据库student.mdb,改为:,改为:student.asa或或student.asp(6)数据库的设计原则(三范式)数据库的设计原则(三范式)n第一范式:如果一个关系第一范式:如果一个关系R的每一个属性都是不可分的每一个
5、属性都是不可分解的解的,则称则称R是满足第一范式是满足第一范式(1NF)的。的。n例如:例如:n学生表学生表(学号,姓名,性别,出生日期,系名,入学学号,姓名,性别,出生日期,系名,入学时间,家庭成员时间,家庭成员)n这个关系这个关系(表表)不满足第一范式,原因是因为不满足第一范式,原因是因为家庭成家庭成员员这个属性可以再分解这个属性可以再分解(父亲,母亲等父亲,母亲等)。解决的办。解决的办法是将这个表分解成如下两张表:法是将这个表分解成如下两张表:n学生表学生表(学号,姓名,性别,出生日期,系名,入学学号,姓名,性别,出生日期,系名,入学时间时间)n家庭表家庭表(学号,家庭成员姓名,亲属关系
6、学号,家庭成员姓名,亲属关系)n第二范式:在满足第一范式的基础上,如果关系第二范式:在满足第一范式的基础上,如果关系R的的任何一个非主键都依赖于主键,则称该表满足第二范任何一个非主键都依赖于主键,则称该表满足第二范式。式。n例如:例如:成绩表成绩表(学号,课程号,出生日期,成绩学号,课程号,出生日期,成绩)n在这个表中,每一条记录由学号在这个表中,每一条记录由学号+课程号唯一确定。课程号唯一确定。学号学号+课程号为此表的复合主键。课程号为此表的复合主键。n但是在这个表中,出生日期只是依赖于学号变化,不但是在这个表中,出生日期只是依赖于学号变化,不是依赖于学号是依赖于学号+课程号,所以不满足第二
7、范式。课程号,所以不满足第二范式。n第二范式又称为部分依赖问题第二范式又称为部分依赖问题(一定是复合主键一定是复合主键),即,即非主键对复合主键的部分依赖。非主键对复合主键的部分依赖。n解决办法:拆分为两表解决办法:拆分为两表q成绩表成绩表(学号,课程号,成绩学号,课程号,成绩)q学生表学生表(学号,出生日期学号,出生日期)n第三范式:在满足第二范式的基础上,表中非第三范式:在满足第二范式的基础上,表中非主键列互不依赖,那么就满足第三范式。主键列互不依赖,那么就满足第三范式。n例如:例如:学生表学生表(学号,姓名,系编号,系名学号,姓名,系编号,系名)n这个表中,让学号做主键,由于学号不是复合
8、这个表中,让学号做主键,由于学号不是复合主键,因此一定不会产生对主键部分依赖的问主键,因此一定不会产生对主键部分依赖的问题,所以是满足第二范式的。但是由于系名依题,所以是满足第二范式的。但是由于系名依赖于非主键系编号,所以不满足第三范式。赖于非主键系编号,所以不满足第三范式。n解决办法:解决办法:q学生表学生表(学号,姓名,系编号学号,姓名,系编号)q系名表系名表(系编号,系名系编号,系名)3.访问数据库的过程访问数据库的过程(1)建立)建立Connection对象对象nsetconn=server.createobject(adodb.connection)(2)连接数据库)连接数据库nco
9、nn.open“Provider=Microsoft.jet.oledb.4.0;DataSource=”&Server.MapPath(“sample.mdb”)ConnectionConnection对象名对象名对象名对象名AccessAccess数据库名数据库名数据库名数据库名(3)建立)建立Recordset对象对象nsetrs=server.createobject(adodb.recordset)(4)打开数据表)打开数据表nrs.open成绩单成绩单,conn,cursor,locktypecursor为游标参数,实际应用中的值为为游标参数,实际应用中的值为0、1、2、3Lock
10、type为锁定参数,实际应用中的值为为锁定参数,实际应用中的值为1、2、3RecordsetRecordset对象名对象名对象名对象名数据表名数据表名数据表名数据表名cursortypen0:adOpenForwardOnly,缺省值,启动一个只能,缺省值,启动一个只能向前移动的游标(向前移动的游标(ForwardOnly)。)。n1:adOpenKeyset,启动一个,启动一个Keyset类型的游标。类型的游标。用户对记录做的修改将反映到记录集中,但用户增加用户对记录做的修改将反映到记录集中,但用户增加或删除记录不会反映到记录集中。支持分页或删除记录不会反映到记录集中。支持分页n2:adOp
11、enDynamic,启动一个,启动一个Dynamic类型的游类型的游标。在打开数据表时,只是打开一部分记录,随着程标。在打开数据表时,只是打开一部分记录,随着程序的执行,再打开后面的记录;序的执行,再打开后面的记录;n3:adOpenStatic,启动一个,启动一个Static类型的游标。具类型的游标。具有定位功能的,一次打开全部记录,所占的内存较多,有定位功能的,一次打开全部记录,所占的内存较多,浪费系统资源,打开数据表时间也相对较长浪费系统资源,打开数据表时间也相对较长locktypen1:adLockReadOnly,缺省值,缺省值,Recordset对象以只读方式启动,无法运行对象以只
12、读方式启动,无法运行AddNew、Update及及Delete等方法等方法n2:adLockPrssimistic,当数据源正在更新,当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持时,系统会暂时锁住其他用户的动作,以保持数据一致性。数据一致性。n3:adLockOptimistic,当数据源正在更新时,当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。以对数据进行增、删、改的操作。(5)数据库连接的关闭)数据库连接的关闭n在对数据库所有的操作完毕后,应当及时关闭在对数据库所有的操作完毕后,应当及时关闭co
13、nnection对象,释放资源对象,释放资源nConn.closenSetconn=nothingnSetrs=nothing13-2 使用使用Recordset对象读取数据库对象读取数据库n读取数据表表头读取数据表表头n读取数据内容读取数据内容n改变当前数据记录的方法改变当前数据记录的方法n例子:例子:first00.asp改进:改进:1.读取数据表表头读取数据表表头n第第N个字段的表头为个字段的表头为rs(N).Name(N从从0开始算起)开始算起)nn例:例:first01.aspn在不知道表的字段个数情况下,如何正确的列在不知道表的字段个数情况下,如何正确的列出所有字段的表头呢?出所有
14、字段的表头呢?rs.fields.count:读取字段个数:读取字段个数Fori=0tors.fields.count-1n读取表头也可表示为:读取表头也可表示为:rs.fields(N).namen例:例:First02.asp2.读取数据内容读取数据内容n当打开某一个数据表时,当前数据记录位于第当打开某一个数据表时,当前数据记录位于第一项的位置,此时只能读取这个数据记录的数一项的位置,此时只能读取这个数据记录的数据,数据表示方法如下图据,数据表示方法如下图rs(0)表示当前数据记录的第一项数据,第表示当前数据记录的第一项数据,第N项数据为项数据为rs(N),N从从0开始开始n读取数据的方法
15、:读取数据的方法:n读取数据的第二种方法:读取数据的第二种方法:Rs.fields(N).valueN从从0开始开始nrs(“字段名称字段名称”)读取数据的第三种方法:读取数据的第三种方法:3.改变当前数据记录的方法改变当前数据记录的方法nMoveNext方法:将当前数据记录移到下一项。方法:将当前数据记录移到下一项。nMovePrevious:移到上一项移到上一项nMoveFirst:移到第一项移到第一项nMoveLast:移到最后一项移到最后一项nBOF属性:若为属性:若为True,表示当前数据记录指针超过了表示当前数据记录指针超过了第一项数据记录第一项数据记录nEOF:若为若为True,
16、表示当前数据记录指针超过了最后表示当前数据记录指针超过了最后一项数据记录一项数据记录n例子:例子:Firstdb.asp用表格显示数据记录用表格显示数据记录小结1.访问数据库的步骤访问数据库的步骤2.读取表头:读取表头:rs(N).namers.fields(N).name3.读取数据:读取数据:rs(N)rs.fields(N).valuers(“字段名称字段名称”)4.读取全部记录:读取全部记录:whilewend语句语句练习n练习:写一网页,打开sample.mdb数据库的“股票行情表”,要求只列出“成交量”大于20000的数据记录。n想一想:如何能实现数据内容的分页显示?13-3 定位
17、式的数据读取n要读取第要读取第100项数据,怎么办?设置项数据,怎么办?设置AbsolutePosition属性:属性:rs.absoluteposition=100n定位功能实现:定位功能实现:cursor类型设为类型设为3n3:adOpenStatic,启动一个,启动一个static类型的游类型的游标,具有定位功能的,一次打开全部记录,所标,具有定位功能的,一次打开全部记录,所占的内存较多,浪费系统资源,打开数据表时占的内存较多,浪费系统资源,打开数据表时间也相对较长间也相对较长分页的几个重要参数nrs.pagesize:每页显示的记录数:每页显示的记录数nRs.pagecount:总页数
18、:总页数nRs.absolutepage:某一页:某一页Pagev1.aspn显示记录的某一页显示记录的某一页Rs.pagesize=10rs.AbsolutePage=1ForiPage=1Tors.PageSizeResponse.WriteFori=0tors.Fields.Count-1Response.WRITE&rs(i)&NextResponse.Writers.MoveNextIfrs.EOFThenExitForNextPagev2.aspn可输入页码的需要对获取的页数可输入页码的需要对获取的页数page转换转换Rs.pagesize=10page=request(page)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第13章 Recordset对象-存取数据库的对象 13 Recordset 对象 存取 数据库
限制150内