新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → ASP编程入门进阶(连载)[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 65973 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: ASP编程入门进阶(连载)[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客楼主
    发贴心情 

    (二十):ADO组件之显示数据记录

    学习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 真正地打开通向数据库中记录集的大门,具体有关后面的参数可以从如下网址中获得。

    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插入数据到库表;再有就是文章多了,一个页面看是不是很麻烦?那么你还要学会分页技术……

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:43:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/10 20:08:17

    本主题贴数30,分页: [1] [2] [3]

     *树形目录 (最近20个回帖) 顶端 
    主题:  ASP编程入门进阶(连载)[转帖](3629字) - Qr,2005年1月14日
        回复:  需要操作系统的安装盘的(22字) - galen,2006年3月24日
        回复:  需要将windows xp professional service pack 2 CD ..(267字) - 串烧,2006年2月21日
        回复:  (十二)缺(8字) - Qr,2005年1月14日
            回复:  [B](十三):Ad & Content Rotator[/B]ASP的强大不仅仅局限于接受..(9020字) - Qr,2005年1月14日
                回复:  [B](十四):Browser & Linking[/B]Browser Capabilit..(6449字) - Qr,2005年1月14日
                    回复:  [B](十五):组件Counters[/B]该组件用于创建一个或多个计数器,这些计数器用于跟..(4411字) - Qr,2005年1月14日
                        回复:  [B](十六):FSO组件之驱动器操作[/B]FSO,正如UFO般令人激动、令人神往,当然更..(4195字) - Qr,2005年1月14日
                            回复:  [B](十七):FSO组件之文件夹操作[/B]操作完驱动器,接着就是来操作文件夹了。其中包括..(4476字) - Qr,2005年1月14日
                                回复:  [B](十八):FSO组件之文件操作(上)[/B]FSO中除了可以对驱动器、文件夹的操作以外..(4246字) - Qr,2005年1月14日
                                    回复:  [B](十八):FSO组件之文件操作(中)[/B]学会了FSO提取文件值,也学会了将信息输入..(7381字) - Qr,2005年1月14日
                                        回复:  [B](十八):FSO组件之文件操作(下)[/B]一,fso.GetFile 提取文件相..(2638字) - Qr,2005年1月14日
                                            回复:  [B](二十):ADO组件之插入数据记录[/B]简单的显示记录已经掌握,现在需要的就是通过A..(5899字) - Qr,2005年1月14日
                                            回复:  [B](二十):ADO组件之显示数据记录[/B]学习ASP的万里长征就快到终点了:等把AS..(7065字) - Qr,2005年1月14日
                                            回复:  [B](十九):ASP技巧累加(二)[/B]严格控制Session 可以将不需要Sess..(2901字) - Qr,2005年1月14日
        回复:  认识表单(7832字) - Qr,2005年1月14日
            回复:  [B](三):接触脚本程序[/B]有了前面的html中关于form的强化知识,是不是在想,下面..(10511字) - Qr,2005年1月14日
                回复:  [B](四):内置对象Request[/B]系统学习ASP,就是先从ASP的几大内置对象开始的..(7333字) - Qr,2005年1月14日
                    回复:  [B](五):内置对象Response[/B]通过对Request对象的学习,可以了解到,Req..(8632字) - Qr,2005年1月14日
                        回复:  [B](六):Cookies讲座[/B]什么是 Cookie?Cookie 其实是一个标签,经..(6636字) - Qr,2005年1月14日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms