本日志标题:ASP编程入门进阶(二十):ADO组件之显示数据记录        [2004-4-9]

学习ASP的万里长征就快到终点了:等把ASP的ADO组件搞定。当然这也是最重要的一步,几乎前面所有的学习都是为了这个最终的目的。OK,下面就来详细系统地来一一掌握,步步为营,各个击破。

一,拥有数据库

可以这么说:静态页面和动态页面最大的区别就是采用了数据库。有关一个WEB程序采用数据库和不采用的优越性比较,就不去细细分析了,主要精力还是放在如何使用数据库,如何熟练运用数据库,如何更灵活地运用数据库等等……其中运用操作数据库主要是对数据库内容进行:显示、插入、修改、更新、查询和删除。

这些方法当然也不是一口就能吃出来的,要慢慢感受咀嚼、理解消化。当然首先很重要的便是先拥有数据库了。否则,一切都是空谈,巧媳妇难以无米之炊嘛。

一般而言,我们所说的数据库其实就是一个数据库文件,该文件是由一些数据库管理系统(DBMS)建立生成的。目前一般的DBMS也就是常用常听说的ACCESS,SQLSERVER,MYSQL,ORACLE。当然一般个人站点,小型企业采用ACCESS完全足够;稍微大些的就采用同样是Microsoft公司的SQL SERVER或者是MYSQL,值得注意的是MYSQL一般是和另外一种网络编程语言PHP完美结合的。当然更大型的就采用ORACLE了。呵呵,曾经在学习PB时还运用到SYBASE数据库,UNIX系统的Informix数据库……DBMS简直是多如牛毛-_-!

话说过来,目前我们就直接使用ACCESS了:1,使用简单;2,入门掌握容易;3,实在没有比这个更适合初学的了。

一切还得从实际操作开始。

1,打开ACCESS数据库,选择新建数据库,将其命名为cnbruce.mdb,并保存到一专门文件夹database中



2,在新建的数据库容器中双击“使用设计器创建表”,弹出的表1窗口中字段名称输入“cn_id”,数据类型选择“自动编号”,并选择上方工具栏中的钥匙按钮,将该字段设为主键。

继续输入字段“cn_title”,数据类型选择“文本”;NEXT输入字段“cn_content”,数据类型选择“备注”;
PS:备注和一般类型文本最大的区别就是备注允许插入的字段值相对要多些,这在插入一些较长文章的时候尤其重要。

仍然输入字段“cn_author”,数据类型选择“文本”;并且切换到下面“常规”中的“允许空字符串”选择“是”。
PS:这表面允许cn_author字段的值可以是空的,这在当提交表单,某些信息不填写但要正确插入数据库时,显得很重要。

最后输入字段“cn_time”,数据类型选择“日期/时间”,继续切换到“常规”中的“默认值”输入“now()”函数

末了,将“表1”另存为“cnarticle”



3,双击打开cnartile表,填写第一行:“cn_title”输入“test”,“cn_content”输入“this is a test”,“cn_author”输入“cnbruce”,时间已经自动添加。完成!关闭表,关闭数据库。



二,建立数据库连接

OK,数据库已经建立完毕,并且已经填写了一行信息内容。那么现在需要的就是同过ASP将该行信息显示出来。

要想显示,首先还是需要ASP与该数据库文件建立连接,具体怎么建立?往下看。

1,conn.asp:主要起的是连接并打开某数据库文件的功能。该文件建议单独存在,并且位置是和存放数据库的文件夹database处与同一物理层次。


<%
db_path = "database/cnbruce.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
%>



db_path = "database/cnbruce.mdb",不用说,就是将数据库的相对路径赋到一个变量上,以方便下面继续调用。

Set conn= Server.CreateObject("ADODB.Connection"),和其它建立组件一样,建立了一个ADO连接,并用一对象conn来接受。

connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path),很显然就是连接字符串了,其包括打开数据库的驱动方法OLEDB,和打开和哪个数据库的连接(即数据库的路径)。

需要再次提醒的是:无论是FSO对文件、文件夹的操作还是ADO对数据库的操作,对被操作文件的取得都是获得的绝对的物理地址,一般情况之下,采用Server.MapPath方法相对较好。

conn.Open connstr最后对象conn通过连接字符串connstr打开了数据库的连接。

三,显示数据库内容

建立了数据库,建立了和数据库的连接,下面水到渠成地就是将数据库中的内容通过ASP显示出来。

2,showit.asp


<!--#include file="conn.asp" -->

<%
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from cnarticle"
rs.Open sql,conn,1,1
%>

<%
if rs.EOF and rs.BOF then
response.write ("暂时还没有文章")
else
Do Until rs.EOF
response.write("文章标题是:"& rs("cn_title"))
response.write("<br>文章作者是:"& rs("cn_author"))
response.write("<br>文章加入时间是:"& rs("cn_time"))
response.write("<br>文章内容是:"& rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Loop
end if
%>

<%
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>



简单调试本页,不出任何意外,相信一定能将数据库中的信息显示出来了。(PS:我的数据库中输写了两行)



下面就来具体一个一个解释来理解没行的含义:
1,<!--#include file="conn.asp" --> 没有任何争议,主要是调用conn.asp的所起的功效,这在解释conn.asp文件的时候已经明白。

2,Set rs = Server.CreateObject ("ADODB.Recordset") ADO组件除了Connection连接以外,还有Recordset绑定记录集(相信用过DW做ASP的人现在开始有些重回故里的感觉了)当然 rs 可以形象地想象成数据库表中的某一行。

3,sql = "Select * from cnarticle" 标准的SQL结构化查询语言。很简单:建立了数据库连接,也绑定了记录集,那具体需要哪些信息呢?也就是要筛选一些记录集合了,不过当前采用的是无任何条件,即可以提取所有。

4,rs.Open sql,conn,1,1 真正地打开通向数据库中记录集的大门,具体有关后面的参数可以从如下网址中获得。 https://blog.cnbruce.com/showlog.asp?cat_id=26&log_id=283

5,if rs.EOF and rs.BOF then 该语句里面涉及到了rs.EOF 和 rs.BOF 以及两者的逻辑运算 and 。rs.EOF 表示到达数据库表中的最后一行,rs.BOF 表示到达数据库表中的第一行。整个语句可以理解为,如果当前数据库中的最后一行就是数据库表中第一行,那么可以肯定:当前数据库表中没有任何数据。

6,
Do Until rs.EOF
...
rs.MoveNext
Loop


主要就是一个DO LOOP 循环语句了,其中循环的结束条件为:直到rs.EOF,即值得数据库表的最后一行。那么在这些条件满足的许可之内,就是来显示具体的信息了。

每次循环只能显示数据库表中的一行,如果要继续读取下行,那么 rs.MoveNext 功能真是如此。

7,rs("cn_title")等等 主要就是具体显示记录集中的哪个特定字段的信息值了。很是简单。

8,最后不要忘了释放资源空间关闭记录集连接,关闭数据库连接。

四,一些特殊条件

1,有没有注意到,数据库表信息的显示一般是按照时间的先后排列的,也就经常提到的按时间的升序排列。需要注意:按时间升序,并不一定每个数据库表中都要有一个时间/日期类型的字段,只要存在一个自动编号的字段就可以了。因为该字段是永不重复,并且是依次增大的。因此,按时间升序其实就是按自动编号中号码数值的增加来进行排序的。

当然,问题的关键来了,那就是要按照时间的降序排列,即始终从最新的内容开始显示。那具体需要哪些手术呢?
很简单,将连接字符串稍做修改。

由 sql = "Select * from cnarticle" 添加修改为
sql = "Select * from cnarticle order by cn_id desc"
其中 order by cn_id 即通过cn_id字段,desc 即降序了。

2,有是时候,只需要提取最前或者最新的几条信息,那这个又具体如何操作呢?同样还是连接字符串的修改
由 sql = "Select * from cnarticle order by cn_id desc" 添加修改为
sql = "Select top 3 * from cnarticle order by cn_id desc"
其中 top 3 就表示提取最新的三条信息内容了。

That's All. 现在一个文章系统、新闻系统或者留言本显示部分的精华内容你已不费吹灰之力搞定。

留下你的是:文章的格式可能显示不对劲,比如回车、空格都不显示了,那么你就还要学会处理接受的数据库表的值(在ASP的几个练习中提到的);文章不能老是打开数据库输入信息啊,那么你就要继续学会如何用ASP插入数据到库表;再有就是文章多了,一个页面看是不是很麻烦?那么你还要学会分页技术……

要搞的太多了,后面我会详细道来:)

[Edit on 2005-8-8 16:02:59 By cnbruce]

在百度搜索完整的ASP编程入门进阶(二十):ADO组件之显示数据记录内容,或者用Google搜索相关的更多内容

By [cnbruce] at 9:32:03 | 评论 [31] | 浏览 [60421] | TrackBack| 返回顶部

About Comments
狼哥,我太感谢你了,
在你写的这些文章里,我学到了很知识,
谢谢!(我可以和你交朋友吗?)
我的QQ是339414227
我一直都在支持你!
By [阿牛] at 2004-4-9 20:55:20
出不了
Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a01a8'

缺少对象: '[string: "Provider=Microsoft.J"]'

/myasp/conn.asp,行4
By [qq] at 2004-4-21 10:56:07
有什么问题请到论坛,OK?

http://www.it365cn.com/bbs/
By [cnbruce] at 2004-4-21 11:02:56
老狼:我在跟着你的《ASP编程入门进阶》学习,但有好多基础的东西我都不懂,比如<p>,<body>,等等,好多都是靠猜的。看到你说有《DW2ASP系列》,不知在哪里可以找到?
By [kathy] at 2004-4-21 16:47:52
http://www.cnbruce.com/blog/index.asp?vt=bycat&cat_id=27&page=7
By [cnbruce] at 2004-4-21 16:56:47
确实写得太好了.在楼主身上学到不少东西
By [lwf81] at 2004-7-10 22:11:54
是啊 你的《DW2ASP系列》在哪 呢?

你的教程写的真的非常好 是我看过的最好的教程了!!!
难得 因为你用心去写了
永远支持 你
DW2ASP系列》在哪 呢?
By [度得] at 2005-1-7 20:01:56
谢谢,《DW2ASP》在这里: http://www.cnbruce.com/blog/index.asp?vt=bycat&cat_id=27&page=3

p.s.我的blog分类中选择 Dreamweaver Web
By [cnbruce] at 2005-1-7 21:08:16
如果要显示第5~8条信息怎么办呢?请指教,谢谢!
By [各飞] at 2005-7-29 9:23:13
你好,今天在你这学了不少东西,现在我有一个问题请教,如果一个表单中,我5个人的排名次是重复第三名,(他们都是第3名)我现在想显示所有第三名的名单出来,怎办?
By [yuheduo] at 2005-7-31 21:34:17
我刚来的
By [k123456] at 2005-8-2 7:24:10
狼啊上文说道:

4,rs.Open sql,conn,1,1 真正地打开通向数据库中记录集的大门,具体有关后面的参数可以从如下网址中获得。

网址在哪?
[Edit on 2005-8-8 15:34:59 By hui8614]
By [hui8614] at 2005-8-8 15:32:59
TKS

http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=283
By [cnbruce] at 2005-8-8 16:03:17
thanks to cnbruce..
By [hui8614] at 2005-8-9 13:55:57
好东西!!我喜欢!!
By [刘明华] at 2005-10-14 15:38:15
真的写得不错!!怎么不多写点呀!太少了,呵呵!
By [刘明华] at 2005-10-14 15:39:13
厉害啊,比我们老师讲的好多了,我是大三的学生了,可是感觉没学到什么有用的东西,课本跟不上潮流了,我们网络工程的学生连个数据库和ASP互连都搞不懂,书上没讲,讲的全是概念。以后天天来学习,谢谢老大!!!
By [ppt] at 2005-12-20 18:55:47
Microsoft VBScript 编译器错误 错误 '800a03f6'

缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a01a8'

缺少对象: 'rstData'

/manage/info/modtext.asp,行44

请问要怎么处理上面的 问题,谢谢!急!
By [lihb810] at 2006-7-11 10:29:14
狼哥,请教你一个问题,如何实现数据库里读出的数据滚动显示(横向滚动显示)
By [toee] at 2006-9-12 9:53:01

[Ctrl+A 全部选择进行拷贝 提示:可先修改部分代码,再点击运行]
By [sawera] at 2006-9-12 10:14:05
狼,我爱你。
By [凌志] at 2007-8-8 17:40:22
大哥,我想知道如何读取数据库中特定行特定列的数据该怎么办,方便的话请发到我邮箱(gongzhen20082008@163.com)
By [gongzhen] at 2007-9-19 0:55:39
狼哥你好,asp我不太懂,现在我有点问题想请教你:一个网站有5个后台管理页面,有5个帐号及密码,如何合并成一个后台只要输入一次帐号及密码就能对它们进行管理啊?
By [fjwp2004] at 2007-11-8 14:52:22
狼哥你好,asp我不太懂,现在我有点问题想请教你:一个网站有5个后台管理页面,有5个帐号及密码,如何合并成一个后台只要输入一次帐号及密码就能对它们进行管理啊?
By [fjwp2004] at 2007-11-8 14:53:22
狼哥你好,asp我不太懂,我这两天在赶做一个朋友的网站!
现在我有点问题想请教你:一个网站有5个后台管理页面,有5个帐号及密码,如何合并成一个后台只要输入一次帐号及密码就能对它们进行管理啊?
狼哥,如果你方便的话,请与我qq联系:277614800
或发到我的qq邮箱:277614800@qq.com
非常感谢你
By [fjwp2004] at 2007-11-8 14:56:29
完全按照上述执行showit.asp,出现如下错误,为什么?

错误类型:
Microsoft JET Database Engine (0x80004005)
未指定的错误
/conn.asp, 第 5 行


浏览器类型:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

网页:
GET /showit.asp
By [信息全球] at 2008-1-31 11:01:38
你这的东西很棒``就是少了点``以后常来哦``要时时更新啊```
By [冻豆腐] at 2008-2-6 4:15:00
Asp的相关资料,我找了很久,就是没有找到合适我的。现在终于找到了。以后我会常来的。请问可以注册会员吗?
By [金德] at 2009-12-7 9:26:57
找范文解决
http://fanwen.themanage.cn
By [fan] at 2010-5-17 15:20:25
总算找到一个思路加内容教程了,受教
By [dleung] at 2010-12-15 9:12:27


Post a Comment
呢称: 验证码: 
禁止笑脸转换 禁止UBB | 缩放输入框:6 5 | [Ctrl+Enter提交](1000个字符限制)