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

小愚学ASP 第三篇:在ASP中使用数据库(小小新闻发布系统)

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

《小愚学ASP》
第三篇:在ASP中使用数据库(小小新闻发布系统)
            ----讲课:关大哥    听课:小愚

    关大哥:在前面两篇文章中,我们初步接触了ASP做为动态网络语言的强大功能,我们可以使用ASP制作出与用户实时的交互网页,但如果我们想把用户提交的数据永久地保留下来,那就要使用储存技术了,网络上的数据资料一般是储存在数据库中的,一般使用的数据库是Access、SQL Server两种,对于一般的网络应用而言,使用Access数据库已经足够了。
    Microsoft Access是Microsoft Office中的一个程序,目前使用最广泛的是 Microsoft Access2000,下面我们来建立一个Access数据库。
    打开Access2000,选择新建数据库中的“空Access数据库”如图
本文包含相关图片如下


    点击下方的“确定”,程序弹出“文件新建数据库”对话框,选择文件保存目录后,更改文件名为bha.mdb,点击“创建”,一个空白的数据库就创建完成了。如下图
本文包含相关图片如下


    接下来我们来规划数据库,数据库中最高级的单位是表,一个数据库可以很多个表,但每一个表要有不同的名字,下面我们来新建一个表。点击“设计”或者双击“使用设计器创建表”,弹出“表1:表”如图。
本文包含相关图片如下


    数据库的次一级单位是字段,每一个表中可以很多个字段,但每个字段也要有不同的名字。下面我们要创建三个字段:
    1.new_id '存放编号,数据类型选“自动编号”
    2.new_time '存放时间,数据类型选“日期/时间”
    3.new_note '存放文本内容,数据类型选“备注”
    字段创建完如图
本文包含相关图片如下

    
    接着点击工具栏左起第一个按钮“视图”,弹出询问“是否保存表?”的对话框,选“是”后可以马上修改表的名称,这里我们将省缺的“表1”改为“new”,点“确定”后又弹出另一个对话框“是否创建主键?”,如果选“是”则将第一个字段(new_id)指定为主键。至此字段创建完毕。
    下面我们先来添加一行数据,由于字段new_id设置成自动编号,是不需要填写的,所以我们添加的数据从第二个字段开始,在new_time里填入“01-12-5”(注意日期的格式),在new_note填入“我的ASP新闻发布系统从今天诞生啦!”(你写什么都可以的)。在你一开始往数据库里添加内容的时候,数据库就会自动在new_id里加上序号。这就是“自动编号”的效果。
    现在数据库的工作告一段落,我们开始ASP的部分。
    ASP实现跟数据库的连接,主要是利用ActiveX Data Object (ADO) ,当然,我们无须理会ADO是如何工作,我们只要知道如何使用ASP连接上数据库就可以。下边介绍使用文件方式的数据库连接,这也是目前使用最广泛的数据库连接。
例程  3-1.asp
<%
'这里开始数据库连接
dim conn
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "&server.MapPath ("bha.mdb")
'连接完成
%>
    小愚:哎,怎么在ASP里面打中文了?
    关大哥:这是ASP的注释方式,可以使用“'”或者用“Rem”来填写注释行,可以使得程序容易读懂。当然,注释的内容是不会出现在浏览器中的。
    set conn=Server.CreateObject("ADODB.Connection")
    首先使用ASP内置对象Server的CreateObject方法创建了一个Connection对象。在ASP中,访问数据库只能通过“对象”进行。
    conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "
    接下来,使用Open方法打开与数据源的连接。
    &server.MapPath ("bha.mdb")
    &是VBScript的字符串连接符,用于连接两个字符串。然后使用Server对象的MapPath方法将数据源的路径转换为物理路径。这样做的好处是,当我们把文件复制到其它目录时,我们不须要改变文件的内容,虽然此时文件的路径已经改变了。
    这里最关键的一点是最后的("bha.mdb"),这是Access数据库的路径,我们要连接其它数据库,只要更改双引号里面的内容就可以了。
    小愚:连接数据库之后,是不是就可以显示出里面的内容了?
    关大哥:还不行,ASP的Connection对象仅仅是初始化了数据源的连接,要对数据库的内部数据进行操作还得靠另一个对象:Recordset。Recordset对象允许我们操作数据库的每一条记录,同样的,要使用Recordset对象,必须先用Open方法创建一个Recordset对象的实例。

    dim rs
    Set rs= Server.CreateObject("ADODB.Recordset")
    rs.open "select new_id,new_time,new_note from new",conn,1,1
    这里,新的内容是第三行,使用了Recordset对象的Open方法打开了数据库,注意open后面双引号的里面是一句SQL的查询语句,基本语法如下:Select 字段名(多个字段用逗号间开) From 表名(多个表用逗号间开)。那么这里打开了刚才我们建立的表new里面的三个字段:new_id,new_time,new_note。也就是说,这三个字段的所有内容(全部记录)都是实例rs里面了,我们便可以通过调用rs来显示数据。
    语句是:Response.Write rs("字段名")。如果是单行结构,也可以这样写:<%=rs("字段名")%>。
    下面是一个"相对"完整的例程
例程  3-1.asp
<%
dim conn
dim rs
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "&server.MapPath ("bha.mdb")
Set rs= Server.CreateObject("ADODB.Recordset")
rs.open "select new_id,new_time,new_note from new",conn,1,1
Response.Write rs("new_note")&"<br><small>本新闻发布时间是<font color=red>"&_
 rs("new_time") &"</font></small><hr>"
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
    注意执行的时候数据库文件要与本文件在相同的目录下。执行后浏览器显示如图
本文包含相关图片如下


    ASP的简便性主要体现在可以跟HTML结合使用,在这里,要注意字符串连接符“&”的使用,使用Response.Write方法向浏览发送信息时,信息内容可以是ASP数据以及HTML语句,它们之间要使用连接符&间开,HTML语句要包含在双引号""里面,当一句语句太长不方便阅读时,可以用下划线“_”换行,下划线表示本行与下一行是同属一行代码。
    最后的四行是关闭连接,打开连接需要占用系统资源,在已不需要连接的情况下,把连接关闭是一个节省资源提高速度的好办法。
    上面说过,这只是一个“相对”完整的例程,也就是说运行上面的程序只能读出数据库里的第一行数据,打开一个数据库,Recordset对象的指针就停在第一行数据,所以用上面的方法只能读出第一行数据,那么有多行数据时怎么办?
    我们可以采用循环结构来读取全部的数据,方法是将上例中的Response.Write语句替换成如下语句:
do while not rs.eof
Response.Write rs("new_note")&"<br><small>本新闻发布时间是<font color=red>"&_
 rs("new_time") &"</font></small><hr>"
rs.movenext
loop
    这是一个典型的Do...Loop语句,较常用的语法如下:
    Do While 条件表达式
    条件表达式成立时要执行的代码段
    Loop
    循环结构语句跟IF函数不同,循环结构只要条件成立,就可以不断循环执行下去,直到条件不成立为止,对于我们不能确定要执行多少次的操作最合适了。
    上面的例子又涉及到Recordset对象的一些属性,首先是BOF和EOF属性,BOF表示当前记录在Recordset对象的第一个记录之前,而EOF表示当前记录在Recordset对象的最后一个记录之后。那么not rs.eof就是说“不是在最后一条记录之后”。如果符合,程序就执行中间的代码,而movenext是Recordset对象的移动记录方法,rs.movenext表示把记录指针移到下一行。
    Do...Loop语句一遇到Loop就回到开始,重新测试条件表达式是否成立,成立则再次执行,不成立则跳出整个循环。
    小愚:关键代码其实也挺简单的(其实好不容易才弄懂),不过有一点方便,每次要发布信息都要打开数据库来写……

    关大哥:你是指用Access 2000打开吗?不用,ASP的Recordset对象功能非常强大,可以轻松地新建或删除数据库里的数据。下面我们就来写一个增加新数据的页面。
例程  3-2.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>小小新闻发布系统</title>
</head>
<body>
<form method="POST" action="3-3.asp">
<p align="center">添加新闻页面
<div align="center">
<table border="2" cellspacing="2" width="350">
<tr>
<td width="25%">新闻内容:</td>
<td width="75%"><textarea rows="4" name="note" cols="32"></textarea></td>
</tr>
</table>
<input type="submit" value="添加新闻" name="cmdok"> 
<input type="reset" value="重写新闻" name="cmdcancel">
</div>
</form>
</body>
</html>
    这是添加新闻的页面,使用表单向3-3.asp文件提交要添加的新闻内容。
例程  3-3.asp
<%@language="vbscript"%>
<%
dim note
dim conn
dim rs
note=request.form("note")
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.JET.OLEDB.4.0;Data Source= "&server.MapPath ("bha.mdb")
Set rs= Server.CreateObject("ADODB.Recordset")
'----------增加数据的关键代码,由此开始
rs.open "select new_id,new_time,new_note from new where (new_id is null)",conn,1,3
rs.addnew
rs("new_note")=note
rs("new_time")=date()
rs.update
'---------到此为止
rs.close
set rs=nothing
conn.close
set conn=nothing
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>小小新闻发布系统</title>
</head>
<body>
<div align="center"> 
<a href="3-1.asp">新闻已添加,看看新闻吧!</a>
</div> 
</body>
</html>
    这是处理3-2.htm的表单提交内容的ASP文件,关键代码也是较新的知识是中间用虚线隔开的四行。注意第一行是SQL的查询语句,这里增加了一个条件表达式:where (new_id is null),is是VBScript的操作符,要求is的两端是同一个对象,也就是说,要求new_id必须是null(空)的,也就相当于另起一行来写入数据。
    注意后面的“1,3”,是指游标类型(cursor)与锁定方式(locktype),我们只要记住一点就够了,只是显示数据用“1,1”,如果要更新数据,则用“1,3”。
    rs.addnew
    这一行是Recordset对象的addnew方法,用于向数据库添加新记录,执行rs.addnew后,Recordset对象开始准备一个新行来加入新数据。
    rs("new_note")=note
    rs("new_time")=date()
    这是添加数据的语句,把变量note的值写入到字段new_note中,而获取系统当前时间date()写入到字段new_time中。
    rs.update
    最后调用Recordset对象的update方法,该方法用于保存对当前记录的更改,只有当执行到update时,ASP才会将更改保存到数据库中。
    小愚:我来测试一下先,先执行3-2.htm,在表单里填入“这是我发布的第二条新闻!”如图
本文包含相关图片如下

    
    OK!点击“添加新闻”,浏览器显示“新闻已添加,看看新闻吧!”如图
本文包含相关图片如下

    
    当然要看看啦,点击后浏览器显示如图。
本文包含相关图片如下


    关大哥:当然,这个新闻发布系统还不完善,比如说,还没有修改功能,要是不小心打错字了怎么办?也没有删除功能,日积月累,新闻太多了,总要删掉太老的“新闻”吧,还有……
    小愚:ZZZzzz......ZZZzzz......



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

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


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

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