《ASP动态网站制作实例教程》第8章:数据库访问
发布时间:2024-11-17
发布时间:2024-11-17
本章主要内容:Recordset对象; Command对象; 综合示例。
第8章 数据库访问
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
本章主要内容
8.1 Recordset对象 8.2 Command对象 8.3 综合示例
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象在利用Connection对象和一个数据库建立起连接后,接下来,就可以使用 ADO的Recordest对象访问数据表的记录了。 创建Recordset对象 创建Recordset对象有两种方法,其一是利用Connection对象的Execute方 法返回的查询结果自动创建,其二是用Server.CreateObject方法直接创建。
(1)利用Connection对象的Execute方法返回的查询结果自动创建。
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象【例8.1】查询并显示学生表中的数据。 ASP程序代码如下:
<%Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DSN=ODBC测试" set rs = Conn.Execute("Select * From 学生表") %> 学号:<%=rs("学号")%><br> 姓名:<%=rs("姓名")%> 性别:<%=rs("性别")%> ")%><br> <% Conn.Close set Conn = nothing %>http:///webnew/
出生日期:<%=rs("出生
本章主要内容:Recordset对象; Command对象; 综合示例。
该程序代码执行的结果如下图所示。
在这个例子中,先创建了一个Connection对象实例Conn,然后通过Conn的 Execute方法执行SQL查询语句,返回一个记录集合,赋值给Recordset对象的 实例rs,最后从rs中读出了学生表中的第一条记录信息 。用这种方式得到的 Recordset对象实例 rs 是以只读的方式创建的。它有很多限制,比如只能向下, 而不能向上移动记录指针,无法跟踪数据库的变化等。为了能够更灵活地操作 Recordset对象记录集合,往往是直接创建Recordset对象。http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象(2)利用Server.CreateObject方法直接创建,然后用Recordset对象的 Open方法打开记录集合。 语法格式: Set Recordset对象名 = Server.CreateObject("ADODB. Recordset") 例如: <% '创建一个Connection对象Conn Set Conn = Server.CreateObject("ADODB.Connection") '使用Conn与数据源相连 Conn.Open "DSN=ODBC测试" '创建一个Recordset对象实例rs Set rs = Server.CreateObject("ADODB.Recordset") '写出SQL执行串 str = "Select * From 学生表" '使用rs的Open方法打开记录集合 rs.Open str,Conn %>http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象8.1.1 Recordset对象的记录指针(游标)如下图所示,Recordset对象是个记录的集合,是按字段和记录形式构成的 二维表。每个Recordset对象包含一个或多个字段,包含一条或多条记录,表示 一次对某个或某几个数据表查询的结果。 每当数据从数据库中读出来后,系统就会为其提供一个记录指针,默认情 况下该指针指向Recordset对象记录集合的第一条记录。在任何时刻,每一个 Recordset对象只有一条记录是当前记录,即记录指针所指向的那条记录。只有 成为当前记录后,其内容才能被读取
。如果要读取其他记录,就必须先移动这个 记录指针。
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象8.1.2 Recordset对象的常用属性Recordset对象的常用属性如下表所示。属性名称 AbsolutePage AbsolutePosition ActiveConnection 说明 Recordset对象记录集合有分页时,设置当前记录所在位置的页号。 设置记录指针所在绝对位置,即第几条记录。 设置Recordset对象记录集合属于哪一个Connection对象。 检验记录指针所指位置是否在第一条记录之前,若成立,则返回True,否则返回 False。 检验记录指针所指位置是否在最后一条记录之后。若成立,则返回True,否则返 回False。 Recordset对象记录集合在内存中缓存的记录数,用来决定客户端每次由数据库 端取回的记录数。 Recordset对象的游标类型,用来设置记录指针在Recordset对象记录集合中的移 动方向。 锁定当前记录。 Recordset对象记录集合有分页时,设置每一页所容纳的记录数。 Recordset对象记录集合有分页时,设置页面总数。
BOFEOF CacheSize
CursorTypeLockType PageSize PageCount RecordCount
http:///webnew/
返回Recordset对象记录集合中记录的总数。该属性要求CursorType属性为1或者 3,否则出错。
本章主要内容:Recordset对象; Command对象; 综合示例。
(1)Recordset对象记录集合中的记录除了拥有绝对位置(AbsolutePosition)外,也 可以将一定数量的记录分开为不同的数据页,也就是说存在的每一个数据页拥有相同的记 录数(PageSize)。AbsolutePage、AbsolutePosition和PageSize有如下关系: AbsolutePage = (AbsolutePosition/PageSize) + 1 (小数点无条件舍去) (2)CursorType属性有4个设置值,如下表所示。设置值 常量 简要说明 默认值,只能向下移动记录指针。如果只想简单的顺序浏览记录,则可大大提高效率。 但Recordset对象的有些属性和方法在该类型下不能被使用,如RecordCount、 AbsolutePosition和AbsolutePage等。 索引键值游标。对于同一个数据库而言,使用它的用户可能不止一个,此类型的游标可 以保证用户在从数据库中读取记录时,并不会读取到其他用户在同一个数据表中新增 (Insert)或删除(Delete)的记录,但其他用户更新(Update)的记录可以被看到。而 且记录指针可以自由地上下移动。 动态游标。此种类型的游标功能最强,但消耗的系统资源也最多。其他用户对数据表所 做的任何新增(Insert)、删除(Delete)或更新(Update)记录操作,都会立即反映到 Recordset对象中。同索引键值游标一样,记录指针也可以自由移动。 静态游标。若Recordset对象在读取记录的同时,有其他用户改变(Insert、Delete或 Update)了数据表中的内容,则Recordset对象中已经存储的记录不会受到任何影响。 记录指针可以
自由移动。
0
adOpenForwardOnly
1
adOpenKeyset
2
adOpenDynamic
3
adOpenStatic
注意:一旦打开了Recordset对象,就无法再改变CursorType属性。可以通过先关闭 Recordset对象,再改变CursorType属性,然后再重新打开Recordset对象的方法有效地 改变游标的类型。 http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
(3)在同时可被多用户修改的数据库应用程序中,必须解决好可能发生的多 个用户同时对同一条记录进行操作时的情况。这种情况出现时,数据的完整性就 会受到威胁,这是因为一个用户可能会在不自觉地在保存自己所做的修改时覆盖 他人的修改。可以通过LockType属性来解决这个问题,其有4个设置值,如下表 所示。设置值 1 常量 adLockReadOnly 简要说明 默认值,表示Recordset对象以只读方式打开,用户不能修改任何数据。无法运行 AddNew、Update及Delete等方法。 当数据源的数据正在被更新时,系统会暂时锁定记录,禁止其他用户的操作,以保 持数据一致性。即从开始编辑某条记录时,便锁定此记录,待编辑完毕并执行 Update方法进行了更新后,系统才自动解锁。例如: 进入锁定 → rs("数学") = rs("数学") + 100 rs("语文") = rs("语文") + 100 rs.Update() → 解除锁定 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行 增、删、改的操作。只有调用Update方法时,才锁定记录。例如: rs("数学") = rs("数学") + 100 rs("语文") = rs("语文") + 100 进入锁定 → rs.Update() → 解除锁定 可以以批处理的方式更新记录。例如: for(i = 0; i <10; i++) { rs("数学")=rs("数学")+100 rs("语文")=rs("语文")+100 rs.MoveNext() } 进入锁定 → rs.Update() → 解除锁定
2
adLockPrssimistic
3
adLockOptimistic
4
adLockBatchOptimistic
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1 Recordset对象8.1.3 Recordset对象的常用方法Recordset对象的常用方法如下表所示。方法 AddNew CancelBatch 说明 向Recordset对象记录集合中插入一条新记录,一般情况下,需要再执行Update方 法才算完成新增。 取消对Recordset对象记录集合的批处理更新操作。 取消对Recordset对象记录集合中某条记录的更新操作。这个方法只能在修改记录之 后,且尚未写入数据库(即尚未调用Update方法完成更新)之前,才能够取消更新, 使记录恢复成原样。 关闭打开的Recordset对象。 删除Recordset对象记录集合中的当前记录。 取得Recordset对象记录集合中的多条记录。 将记录指针移至第一条记录。 将记录指针向上移动一条记录。 将记录指针向下移动一条记录。 将记录指针移至最后一条记录。 取得一个Recordset对象,它可能包含符合SQL查询的所有记录。 完成对Recordset对象记录集合中某条记录的更新。
Can
celUpdateClose Delete GetRows MoveFirst MovePrevious MoveNext MoveLast Open Update
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1.3 Recordset对象的常用方法1.Open方法 语法格式: Recordset对象名.Open 数据来源[,CursorType][,LockType]
说明:(1)该方法用来建立与数据表的联系,将结果返回到一个Recordset对象记 录集合中。 (2)数据来源一般为数据表名、SQL语句串等。 2.Close方法 语法格式: Recordset对象名.Close
说明:该方法用来关闭 Recordset对象实例并释放其所占的内存空间。
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1.3 Recordset对象的常用方法3.定位记录指针 在Recordset对象记录集合中用于记录指针定位的常用方法有MoveFirst、 MoveLast、MoveNext和MovePrevious。 语法格式: Recordset对象名.方法 说明: (1)除了MoveNext以外,其他的方法都需要设置CursorType属性为1。
(2)记录指针移动到EOF时,如果继续向下移动,就会出错;记录指针移动 到BOF时,如果继续向上移动,也会出错。因此,移动记录指针前要先使用 BOF和EOF判断是否达到了Recordset对象记录集合的开始和结尾。(3)MoveNext方法速度最快,如果仅仅是按照顺序读取记录,建议使用该 方法。
http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
【例8.2】查询并显示学生表中的所有数据。 ASP程序代码如下: <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "DSN=ODBC测试" set rs = Conn.Execute("Select * From 学生表") Do While not rs.EOF %> 学号:<% =rs("学号")%><br> 姓名:<% =rs("姓名")%> 性别:<% =rs("性别")%> 出生日期:<% =rs(" 出生")%><br> <hr> <% rs.MoveNext Loop rs.Close Conn.Close set Conn = Nothing %>http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
其执行结果如下图所示。可以看到学生表中的数据全都显示出来了。
这个例子里使用了Do … Loop循环,并在循环体内使用了Recordset对象 的MoveNext方法,每循环一次,就将记录指针向下移动一行,直到Recordset 对象记录集合的最后一条记录。http:///webnew/
本章主要内容:Recordset对象; Command对象; 综合示例。
8.1.3 Recordset对象的常用方法4.操作数据库 (1)新增记录-AddNew 语法格式: Recordset对象名.AddNew [字段名数组,字段值数组] 说明:参数省略时为增加一条空记录,且记录指针指向该空纪录,可以对其各个 字段赋值,但不会写入数据库。写入要有Update方法。例如: '新增一条“学号”为“0941101”,其他字段为空的记录 rs.AddNew "学号","0941101" '新增一条“学号”、“姓名”、“性别”、“出生”分别为“0941102”、“李宏”、 “男”、“1992-5-18”的记录 方法一: rs.AddNew Array("学号","姓名","性别","出生"),Array("0941102","李宏","男",#1992-5-18#) 方法二: rs.AddNew rs("学号") = "0941104" rs("姓名") = "李宏" rs("性别") = "男" rs("出生") = #19
92-5-18# rs.Update http:///webnew/