设为首页
加入收藏
发送稿件
小愚学ASP之四

小愚学ASP 第四篇:ASP的数据库编程-SQL语法实战

蚂蚁电商3.0  2003-11-8 16:31:15
www.BHAsp.com
[ 关键字 ] 电脑报,学习,新闻

《小愚学ASP》
第四篇:ASP的数据库编程-SQL语法实战(相对完善的新闻发布系统)
            ----讲课:关大哥    听课:小愚
    小愚:上次写的新闻发布系统果然有用,我把它改了一下,改成了网络上人气很旺的“首页更新”,现在有人要请我当ASP频道的道长哎……
    关大哥:(不是吧,这样也行?!)咳咳,上次那个“新闻系统”,其实不具备现实可用性,因为管理功能方面还有所欠缺,第一,没有修改数据的功能,打错内容了没法编辑;第二,没有删除数据的功能,新闻多了不方便管理;第三,没有管理入口的限制,谁都可以发布新闻,有人发几条非法信息怎么办?所以,这一节课我们来讨论如何增加上述的几个功能。
    小愚:管理很完善啊,修改、删除数据可以先把数据库下载了,再打开Microsoft Access来……(台下晕倒一片)
    关大哥:这时提到的管理是指“在线管理”,不需要下载数据库,而是直接在网上进行。要实现在线管理数据库,就要先加强一下数据库语言:Structured Query Language(SQL,结构化查询语言),下边介绍四条最常用的SQL语句。
    1.Select语句。主要用于对数据库进行检索,查找出符合要求的记录。
    示例:select new_id,new_time,new_note from new
    上面的语句意思是要在表new中进行检索,前面的 new_id,new_time,new_note是表new中的字段,当然,我们可以用“*”号来表示“所有字段”,不过使用“*”号的方便是以牺牲系统性能为代价的,我们不提倡这样做。
    Select语句可以带有条件子句:Where子句
    示例:select new_id,new_time,new_note from new Where new_time=date()
    表示要检索表new中时间字段的数据是今天的数据,也就是说,只查询今天的新闻。
    2.Insert语句。用于向数据库添加一条新记录。语法如下:
    Insert INTO 表名 ( 字段名1,字段2... ) VALUES ( 字段1的值,字段2的值... )
    这里要特别注意“字段的值”要跟“字段名”一一对应。
    示例:Insert INTO new ( new_time,new_note ) VALUES ( '01-12-09','今天完成比较完善的新闻系统!' )
    注意字段的值如果是字符串,要用单引号隔开。如'01-12-09'。
    3.Update语句。用于更新数据库中的一条或者多条记录。语法如下:
    Update 表名 SET 字段名1=字段1的值,字段名2=字段2的值... Where 表达式
    示例:Update new SET new_note='电脑报又要改版了?' Where new_id=3
    Update语句中Where子句是不可缺少了,符合表达式的记录才会被更新,象上例,只有当new_id字段中的值是“3”的那一行的数据才会更新。
    4.Delete语句。用于删除数据库中的一条或者多条记录。语法如下:
    Delete FROM 表名 Where 表达式
    Delete语句跟Update语句不同,Delete语句中的Where子句是可选的,如果没有Where子句,则指定的表的全部记录将被删除。
    Delete FROM new Where new_id=3
    上面的语句将删除new表中new_id字段为3的全部记录。
    小愚:听起来好象不难,不过,还是举一些实际的例子吧,比如,刚才说的那些功能……
    关大哥:也好,我们还是继续上一课的例子吧,把上一课中的“小小新闻发布系统”完善起来。
    显示新闻的页面还是一样,大家可以参照上一课的3-1.asp(修正后的)。这一次我们只讨论管理功能的实现。首先我们来设计一个管理登录页面,只有正常登录后才能进行新闻的发布、修改、删除等操作。
例程 4-1.htm(因篇幅关系,我们只介绍主要部分,其它的html标记大家可自行补充完整……咦,哪里飞来一块桔子皮,咦,又来一块香蕉皮……)
<form method="post" action="4-2.asp">
<table border="1" width="300">
<tr><td width="50%">管理帐号:</td>
<td width="50%"><input name="username" size="20"></td>
</tr>
<tr><td width="50%">管理密码:</td>
<td width="50%"><input type="password" name="password" size="20"></td>
</tr>
<tr><td width="100%" colspan="2" align="center">
<input type="submit" name="Submit" value="确定">
<input type="reset" name="Submit2" value="重写">
</td></tr></table>
</form>
    本文件关键是表单部分,表单向文件4-2.asp提交两个内容,一个是账号(username),另一个是密码(password)。下面是处理表单的文件:
例程 4-2.asp
<%
dim username,password,adname,adpw
adminname="admin"   '这里设定管理员的帐号
adminpw="admin"     '这里设定管理员的密码
username=request.form("username")
password=Request.Form("password")
if username=adminname and password=adminpw then
response.cookies("admin")=true
response.redirect "4-3.asp"
else
response.redirect "4-1.htm"
end if
%>
    这里仍然用IF函数对管理员身份进行确认,当管理帐号及管理密码都正确时,建立一个Cookier,名为admin,并同时将admin的值设定为True(真),然后将页面重定向到管理页面4-3.asp,这里用了Response对象的Redirect方法。如果管理帐号或者管理密码不正确时,将页面重定向回到登录页面4-1.htm。
    小愚:哎,等等,如果有人知道4-3.asp是管理页面,直接在浏览器地址栏打4-3.asp怎么办?
    关大哥:呵呵,这个俺早就料到了,我们可以在每个管理页面最前面加上一段代码,用于检测Cookier中的值,如果Cookier中admin的值等于True,那么程序才会继续运行,如果不是,则重定向回到登录页4-1.htm。
例程  4-4.inc
<%
if request.cookies("admin")="" then
response.redirect "4-1.htm"
end if
%>
    小愚:怎么后缀名变成了inc了?
    关大哥:这是一个包含文件,本身不能被执行,只能插入到其它文件中执行。
    小愚:那包含文件有什么作用呢?
    关大哥:一些经常要用到的代码段,几乎在每一个页面都有的代码,我们就可以用一个包含文件来使用它,就不用每一个页面都加上这些代码了,比如数据库的连接代码。
例程 4-5.inc
<%
dim conn
dim rs
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "&server.MapPath ("bha.mdb")
%>
    以后只要在需要这些代码的页面中使用如下语法调用它就行了。
    <!--#include file=4-5.inc-->
例程 4-3.asp(管理页面)
<!--#include file=4-4.inc-->
<!--#include file=4-5.inc-->
<a href="4-7.asp?">添加新闻</a>
<%Set rs= Server.CreateObject("ADODB.Recordset")
rs.open "select new_id,new_time,new_note from new",conn,1,1
do while not rs.eof%>
<%=rs("new_note")%><br><small>本新闻发布时间是<font color=red>
<%=rs("new_time")%></font> 
<a href="4-6.asp?key=edit&id=<%=rs("new_id")%>">修改</a> 
<a href="4-6.asp?key=del&id=<%=rs("new_id")%>">删除</a></small><hr>
<%rs.movenext
loop%>
    注意文件最前面的包含文件,第一个是管理身份确认的,确认通过才继续执行,第二个是数据库连接文件。这里开始用到了ASP的参数调用,方法是在ASP文件后用“?”号连接要传递的参数。这里传递的参数是new_id字段的值以及预先设定的key的值。
  好好利用ASP的多参数传递,能给我们省不少麻烦呢,具体的运用可以这样来:
  IF key="参数1" then 
  相应执行代码段
  Else
    IF key="参数2" then
    相应执行代码段
    Else
      IF key="参数3" then
      相应执行代码段
      End If
    End If
  End If
  篇幅关系,这里只给出一段删除新闻的代码,其它内容,相信能看到这里的网友应该不在话下了(小愚:人之初,性本懒……)。
    小愚:有好几层IF函数哎,原来IF函数还可以这样用啊,
    关大哥:是啊,IF函数可以多层套用,一方面使代码简洁,另一方面使程序易读。
部分例程 4-6.asp
<%
'此处应先判断用户身份和加上数据库的连接代码
if key="del" then  '开始对参数key进行判断
sql="Delete from new where new_id="&Request("id") '这是删除新闻的语句
rs.open sql,conn,1,3
response.redirect "4-3.asp"  '重定向回到管理页面
end if%>
  到这里为止,这个新闻发布系统就比较完整了,可以完成新闻的添加、修改、删除等操作,对付一般的网站应该就……
    小愚:时间不早啦,今天是不是就这样啦(ASP频道的网友等我去指点迷津呢)……
附:为方便网友学习ASP语言,我们已经把完整代码打包,有需要的朋友可以到大头蚂蚁工作室的主页下载
Http://bha.6to23.com/或Http://asp.6to23.com/bha/index.asp


oooooooooo家园提示:人自为谱,家自为说,正误自辨,取舍自酌。引用注明作者和出处。 来源:罗氏家园
阅读:4047
日期:2004/5/23

查看评论 】 【 收藏 】 【 打印 】 【 关闭 】 【字体: 】 
上一篇:小愚学ASP之五
下一篇:小愚学ASP之三
  >> 相关文章
 
发表评论


        站长提示:这里不是互动留言处!
点  评: 字数0
用户名:  密码:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
家园地址:http://www.luos.org  粤ICP备13039246号-2
家园创建:罗良富   技术支持:AssumeYessure   法律顾问:罗劲松