摘 要: 本文分析了应用ASP技术访问Web数据库的原理和方法, 并介绍利用ASP技术实现图书馆图书远程管理和查询的方法。
关键词: ASP; ADO; 数据库; 浏览器/服务器; Web
0 引 言
ASP (MicrosoftActive Server Pages动态服务网页)技术是解决网上数据交换的一个有力工具,它能很好地把HTML和脚本融合在一起,把VbScrip t和J scrip t等脚本语言嵌入HTML 形成ASP文件。ASP可以调用其它程序语言编写的DLL 程序和ActiveX组件来扩充功能; ASP源代码不会传到浏览器端,源程序不会被窃取。
1 ASP对WEB数据库的访问原理和过程
1. 1 ASP访问WEB数据库的原理
当用户通过浏览器向网页服务器发送一个对3 1asp文件的HTTP请求时,服务器响应该请求,调用ASP引擎将ASP文件传给ASP1dll执行。 则ASP1dll执行ASP文件中的脚本代码。 如果脚本代码中含有访问数据库的请求,则通过ODBC与后台数据库相连,ASP通过数据库组件ActiveX DataObjects(ADO)来访问数据库。 ADO 是ActiveX,先使用Server对象的Create Object方法创建对象,然后通过ADO的Connection对象管理连接数据库,这样就可以对数据库进行各种操作了。
1. 2 ASP与ADO实现网上数据交换的主要过程
(1)创建数据源DSN
DSN是为程序访问的数据库的名字,在程序中访问数据库时,将DSN 传给系统,通过DSN 访问实际数据库。
在WEB 服务器上设定ODBC与数据库的连接,即选择“控制面板”中的ODBC选项,再选择“系统DSN”选项,然后单击“添加”选择相应数据库的驱动程序,选择“下一步”后,在“创建一个新数据源”对话框中输入数据源名,并选择其对应的实际数据库名,即可完成。
(2)创建数据库连接并打开数据库
在ASP程序中如果要访问数据库,必须先创建和打开与数据库的连接,才可以访问和使用数据库。 其实现步骤是先创建connection对象然后再打开数据库连接。 下列命令是一个连接并打开数据库的实例:
Set Conn = Server1 Create Object (“ADODB1Connection”)Conn1 Open“ DSN = tushu; U ID = sa; PWD =tushu”
其中使用Set Conn = Server1 Create Object(“ADODB1 Connection ”) 语句创建连接, 使用conn1 open“DSN = tushu; U ID = sa; PWD = tushu”语句打开数据库
在打开数据库后,要访问数据库可以使用connec2tion对象的execute方法,执行SQL命令访问数据库。
例如: set rs = conn1execute (“select bookno, ti2tle, writer from bookif”)
通过conn的Execute 方法,我们可以获取表book中bookno, title, writer三个字段的所有记录。
如要处理复查的SQL 命令,可以通过“&”连接起来,也可以通过存储过程来实现:
sql =“selecet3 from book where dz = ”&dz&order by bookbmset rs = conn1execute ( sqp)
(3)使用RecrodSet对象所提供的方法和属性,完成SQL查询结果集的处理
一个成功的数据库应用程序使用Connection对象建立链接并使用Recordset对象处理返回数据,即存放查询数据库的结果。 并可以读取当前字段的值和通过记录指针浏览RecrodSet的记录。
使用字段名称获取字段的值。 例如:
set rsbooklist = server1createobject (“ADODB1Recordset”)
set rsbooklist = conn1execute (“ select bookno,title, writer from bookif”)
< % = rsbooklist (“bookno”) % > ∥此句显示当前记录字段bookno的值用recordset的movenext属性将游标移到下一个记录。 例如:
< TABLE Border = 1 >
< TR > < TH >书名< /TH > < TH >书号< /TH > < TH >价格< /TH >
< % do until rsbooklist1EOF% >
< TR >
< TD > < % = rsbooklist (“title”) % >
< /TD >
< TD > < % = rsbooklist (“bookno”) %> < /TD >
< TD > < % = rsbooklist (“writer”) %> < /TD >
< /TR >
< % rsBooklistMoveNext % >
< % LOOP% >
< /TABLE >
该例用于浏览所有在rsbooklist中的记录,并以表格方式返回title, bookno, writer等字段值。
(4)断开与数据库的连接
应先关闭recordset对象后断开connection对象的连接。
这些操作可以通过以下两个命令完成:
rsbooklist.close
conn.close
2 图书管理系统的实现
2. 1 实现图书管理的主要模块及数据库结构
(1)用户登录界面程序( logon1html文件)
(2)用户身份校验程序( logon1asp文件)
(3)管理员界面程序(manager1asp文件)
(4)用户查询界面的程序( user1asp文件)
(5 ) 用于用户查询的数据库查询程序( search1asp文件)
其中得用ACESS创建一个名为tushu的数据库,在数据库中添加一个名为boolif的表,它包含bookno图书编号, Title图书标题, writer作者等字段。 将基本资料输入到数据库中,也要以通过相关的程序添加到数据库中。
2. 2 主要功能模块的源程序
2. 2. 1 用户身份校验程序( logon1asp文件)
< %@LANGUAGE =Vbscrip t% >
< % response1buffer = true% >
< %
set logfile = server1createobject (“ scrip ting1filesystemobject”)
logfilename = server1mappath (“log1txt”)set r = logfile1opentextfile ( logfilename, l, false,false)
flag = 0
I = 0
Do while not r1atendofstream
I = I + 1
Rot = r1readline
Rootid = r1readline
If request1form (“username ”) = root and re2quest1form (“id”) = rootid and I = l then flag = l
If request1form (“username ”) = root and re2quest1form (“id”) = rootid and I = 2 then flag = 2
Loop
r.close
session (“username ”) = request1form (“user2name”)
∥分支定向下一步的网页显示内容
if flag = 1 then
response1clear
response1redirec“t manager1asp”
esleif flag = 2 then
response1clear
response1redirec“t user1asp”
else flag = 0
response1clear
response1redirec“t logon1html”
end if
% >
2. 2. 2 用户查询的数据库查询程序search1asp 文件:
< %@ LANGUAGE =Vbscrip t% >
< html >
< head >
<meta http = equiv =“content - type”content =“text/html; charset = gb2312”>
<meta name =“GENERATOR”content =“Mi2crosoft frontapage 610”>
<meta name =“ProgId”content =“frontpage1editor1 document”>
< title >查询结果< / title >
< /head >
< body >
< hl align = center >查询结果< /hl >
< div style =“text - align: center”>
∥建立和数据库的连接并建立对象的实例< %set conn = server1createobject (“ADODB1Recordset”)Conn1Open“DSN = tushu; U ID = sa; PWD =tushu”
Set rs = server. createobject (“ADODB1 Record2set”)RS1 Active Connection = conSelect case request. form (“selectdb”)Case“计算机类”
Dbname =“computer”
Case“数学类”
Dbname =“math”
Case“所有数据库”
Dbname =“all”
End select∥对查询语句的设定Whstr =“”
If request1 form (“YGT”) < > thenWhstr =whstr&“出版时间”> & request1 form(“YGT”)End ifIf request1 form (“YLT”) < > thenIf whstr =“”thenWhstr = whstr&“出版时间”< &request1form(“YLT”)ElseWhstr = whstr &“AND 出版时间< ”& re2quest1form (“YLT”)EndifEndifT = 1If dbname =“all”thenT = 0End ifIf t = 0 thenDbname =“computer”
End ifWhiel t < 2Response1 write“ < P > ”
Response1 write“在数库”& dbname&“中”:
∥查询的核心部分select case request1 form (“R1”)∥对书名的查询case v1sql =“select3 from”& dbbname &“WHERE书名= ”& request1 form (“T1”) &if whstr < > then sql = sql &“ AND”& whsrset rs = con1 execute ( sql)if rs1 eof thenresponse1 write“没有找到记录”
elseresponse1 write“ < TABLE BORDER = 2 > ”
response1 write“TR”
for I = 0 to rs1 fields1 count - 2response1 write“ < TH > ”& rs ( i) 1 name &“ < /TH > ”
nextresponse1 wri“t < /TR >”
have = 0do while not rs1eofhave = have + 1response1 write < T“R > ”
for I = 0 to rs1 fields1 count - 2response1 write“ < TD > ”& rs ( i)“ < /TD > ”
nextresponse1 write“ < /TR > ”
rs1 movenextloopresponse1 write“ < / table > ”
response1 write“ <HR > ”
response1 write“共找到”& cstr ( have) &“条记录”
endif∥是对书号的查询case“v2”
sql =“select3 from”& dbname &“WHERE书号= ”& requext1 from (“T1”) &if whstr < > then sql = sql &“AND ”& whstrset rs = conn1execute ( sql)if rs1 eof thenresponse write“没有找到记录”
elseresponse1 write“ < TABLE BORDER = 2 > ”
response1write“ < TR > ”
for I = 0 to rs1 fields1 count - 2response1 write“ < TH > ”&rs ( i) 1 name&“ < /TH > ”
nextresponse1write“ < /TR > ”
hav = 0do while not rs1eofhave = have + 1response1write <“TR > ”
for I = 0 to rs1 fields1count - 2response1write“ < TD > ”&rs( i)“ < /TD > ”
nextresponse1write“ < /TR > ”
rs1movenextloopresponse1write“ < / table > ”
response1write“ <HR > ”
response1write“共找到”&cstr ( have)“条记录”
endif∥对作者进行查询case“v3”
sql =“select from”& dbname &“WHERE 作者= ”& requext1from (“T1”) &“if whstr < > then sql = sql &”AND“& whstrset rs = conn1execute ( sq1)if rs1eof thenresponse1write”没有找到记录“elseresponse1write” < TABLE BORDER = 2 > “response1 write” < TR > “for I = 0 to rs1 fields1count - 2response1 write” < TH > “&rs ( i) 1 name&”( /TH) “nextresponse write” < /TR > “hav = 0do while not rs1eofhave = have + 1response1write <”TR > “for I = 0 to rs1fields1 count - 2response1 write” < TD > “& rs ( i)” < /TD > “nextresponse1write” < /TR > “rs1 movenextloopresponse1 write” < / table > “response1write” <HR > “response1 write”共找到“& cstr ( have) &”条记录“endifend selectt = t + 1dbname =”amth“wendcon1close& >
< /div >
< /div >
< /html >
参 考 文 献[ 1 ]旺晓平,钟 军。 ASP网络技术开发[M ]. 北京:人民邮电出版社, 2003[ 2 ]陈锦辉。 XML与ASP网站实作大全[M ]. 北京:中国铁道出版社, 2001[ 3 ]王国荣。 ASP网页制作教程[M ]. 北京:人民邮电出版社, 2000[ 4 ]VK·工作室。 HTML +CSS入门讲座[M ]. 北京:科学出版社, 2001[ 5 ]王 珊,胡道元,钟玉琢等。 数据库应用与开发SQLSever 2000 [M ]. 北京:电子工业出版社, 2002[ 6 ]胡志刚。 FrontPage 2002入门与提高[M ]. 北京:清华大学出版社, 2001
中国论文发表网为您分享计算机论文
















