[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[ASP]俺写的ASP超简略教程---第四节:数据检索

上一篇:[转帖]常用的上传组件--ASP Upload components
下一篇:[ASP]俺写的ASP超简略教程---第五节:数据的条件检索

添加日期:2007/7/9 10:41:58 快速返回   返回列表 阅读4424次
4.数据检索
----------------------------
记得上一节说的吧?
DB操作的步骤是建立连接、进行处理、关闭连接。

数据检索时,也是这样。
---------------------------------------------------
(1)如何检索数据
ASP中检索数据主要使用Adodb.RecordSet对象。

RecordSet,通常也称为记录集,也就是记录的集合。

可以理解为一个包含查询结果的表格,每行一条记录。

举例:
set rs=server.createobject("Adodb.RecordSet")
sql="select book_name from BOOK order by book_name"
rs.open sql,conn,0,1

Open方法后的4个参数分别是SQL语句、Connection对象、游标类型、锁定类型
----------------------------------------------------------------
游标类型有0,3,1,2这么四种,功能逐渐增强,资源消耗也是逐渐增强。

通常,如果只是单向遍历记录集,使用0即可。

需要正向、反向移动记录指针时,使用3即可。
--------------------------------------------------------------------
锁定类型有1,2,3,4这四种,分别是只读,悲观、乐观、乐观(批次)锁定。

细节现在先不用管。
---------------------------------------------------------------------
总之,现在知道那三行的大概语法就行了

(2)判断查询结果是否为空

BOF属性,就是记录集的开始
EOF属性,就是记录集的结束

如果两个属性同时为True,说明没有记录。

if rs.bof and rs.eof then
....'没有记录
else
........
end if

(3)输出记录
'循环输出
do while not rs.efo
    Response.write rs("字段名")
    rs.movenext '一定要有这句,否则死循环了。应该养成习惯,先把这句写上。
loop

'任意输出
response.write rs("字段名")
rs.movenext 
response.write rs("字段名")
..........

(4)关闭记录集

rs.close
set rs=nothing '如果不用了,就释放掉。

记录集关闭后,可以再次Open,

也就是说,使用一个rs就可以多次检索数据。

(5)RecordSet中的列名

列名就是按照SQL中的字段名来起的

如:
sql="select book_name,book_author,book_price from BOOK"
那么 引用时,就用rs("book_name")等引用列的值。

如:
sql="select max(book_price) as maxPrice fom BOOK"
那么就用rs("maxPrice")引用此列。

另外,可以用下标数字来引用

rs(0) 就是第一列
rs(1)就是第二列
………………

(6)RecordSet中列的类型

列的类型,同DB中类型是一致的

有函数运算时,看实际情况吧。

比如max(book_price)这当然是数字型了

max(book_author)这就是文本型了。

进行判断等操作时,注意转换数据类型。

(7)记录指针的移动
前提:需要以支持任意移动的游标类型打开。

Rs.move 3 '向前移动3步,向前,是指向着记录尾部移动
Rs.move -1 '向后移动1步,向着记录开始移动
MoveFirst '移动到第一条记录
MoveLast '移动到最后一条记录
MoveNext '移动到下一条记录,等同于rs.move 1
MovePrevious '移动到前一条记录,等同于rs.move -1


今日作业:
---------------------------------------
从BOOK表中检索前100条数据,

输出内容:书名、作者、出版社、出版时间、页数、内容简介。

格式自己调节,尽量美观。

========================================================================
点评…………
 
1。XXX的,忘记关闭recordset了…………
 
2。XXX的,也是,没关recordset,
 
最后有一句:conn.execute sql,这是多余的。(XXX的精益求精的精神,大家一定要学习啊!!!)
 
3。XX,挺好。
 
4。XXX,挺好。
 
5。XXX:取100条记录,应该在SQL里用top 100来限制,而不是全部取出后,用循环限制。
 
还有,SQL里最好只select需要的字段,不要用*。
 
我也写了一个,可以瞅瞅。
 
我这个好像比你们的快点哦。哈哈
--------------------------------------------------


<%@codepage=936%>
<% response.charset="GB2312"%>
<html>
<head>
<title>书籍列表</title>
<style>
body {
    font-size: 12px;
    line-height: 150%;
}
td {
    font-size: 12px;
    line-height: 150%;
    color: #000000;
}
.titleFont {
    font-size: 12px;
    font-weight: bold;
    color: #FF9933;
}
</style>
</head>

<body>
<%
set conn=server.createobject("Adodb.Connection")
'str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Book.mdb")
str="Provider=SQLOLEDB;Data Source=192.168.xxx.xxx;"&_
"Initial Catalog=Test;User Id=sa;Password=xxx;"
conn.open str

set rs=server.createobject("Adodb.RecordSet")
sql="select top 100 book_name,book_author,book_publisher,book_publishDate,book_pageNumber,book_Content from BOOK order by book_name"
rs.open sql,conn,0,1

if rs.bof and rs.eof then
    response.write "没有数据。"
else 
    do while not rs.eof %>
<table border="0" align="center" cellpadding="4" cellspacing="1" width="90%">
<tr bgcolor="#97C682">
    <td colspan="4"><b>《<%=rs("book_name")%>》</b></td>
</tr>
<tr bgcolor="#DCECD5">
    <td width="25%">作者:<%=rs("book_author")%></td>
    <td width="25%">出版社:<%=rs("book_publisher")%></td>
    <td width="25%">出版时间:<%=rs("book_publishDate")%></td>
    <td>页数:<%=rs("book_pageNumber")%></td>
</tr>
<tr bgcolor="#DCECD5">
    <td colspan="4">内容简介:<br><%=rs("book_Content")%></td>
</tr>
</table>
<br>
<%        rs.movenext
    loop 
end if

rs.close
set rs=nothing
conn.close
set conn=nothing
%>
</body>
</html>

 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved