摘 要: 本文首先描述了ASP的工作原理及ASP的内置对象和组件,并着重讨论了ASP的数据库访问组件ADO,在此基础上给出了用ASP实现对Web数据库访问的应用实例。
关键词: ASP ADO Web数据库
为了满足浏览端用户动态访问Web数据库的要求,实现Web页面上的动态交互效果,关键技术之一就是数据库与Web的连接。传统的数据库访问方法主要有CGI、ISAPI和JDBC等技术,但这些技术开发步骤烦琐且无法直接与HTML集成,只适合专门的程序员使用,在实际应用中难以进行快速开发、及时维护和大面积推广。应运而生的Active服务页ASP正好弥补了这些不足。在微软倡导的Active平台中, ASP(Active Server Page)属于ActiveX 技术中的服务器端技术,微软将其描述为:“一个服务器的脚本环境,在这里可以生成和运行动态的、交互的、高性能的Web服务器应用程序”。
一、ASP工作原理
1. ASP工作过程及其运行环境
ASP程序工作在Web服务端,浏览器向服务器发出一个HTTP请求,请求一个.asp文件,Web服务器响应该请求并调用ASP引擎执行该文件,当遇到任何与Active脚本兼容的脚本(如VBScript 、JScript)时ASP引擎调用相应的脚本引擎解释执行其中的脚本命令,若脚本中含有访问数据库的请求,则通过ODBC连结后台数据库,由数据库访问组件ADO(Active Data Object)执行访库操作,最后,ASP依据访库的结果集自动生成标准的HTML页面发送到客户浏览器。此过程如图1所示:
HTTP
图1
ASP只能运行在Windows平台上,它的运行环境(Web服务器)有:
·Windows NT Server 4.0下运行IIS 3.0以上版本
·Windows NT Workstation 下运行Peer Web Server 3 .0以上版本
·安装Windows NT Option Pack
·安装Windows NT Service Pack 3以上版本时ASP已内置
·Windows 9X下运行PWS(Personal Web Server):
2.ASP文件及其编程特点:
ASP文件实际就是嵌入可执行脚本的HTML文档,以.asp为扩展名,一个ASP文件主要包含: 一般文本、HTML文件标记和脚本程序。
ASP文件可以使用任何脚本语言,只需提供相应的脚本引擎。ASP自身提供了VBScript和JScript驱动,其中VBScript是缺省的脚本语言。脚本命令语句包含在“<%”和“%>”中。若要在一份ASP文件中混合使用多种语言或采用非默认的脚本程序语言时,可用服务端的SCRIPT标签。其格式为:
<Script Language=ScriptLanguage RunAt=Server>
...
</Script>
若一份ASP文件中同时使用“<%”“%>”与服务端SCRIPT标签包括脚本程序,则前者的语句将先被执行。
另外,ASP服务端Include命令允许在ASP文件的某处引入另一份文件的内容作为该文件的一部分,省去了在许多页面编写相同段落的重复工作。ASP服务端包括SSI(Server Side Include)可插在HTML文件的任一处,ASP提供两种Include 语法:
<!----#Include Virtual=”virtual-path”---->
<!-----#Include File=”real-path”---->
ASP在应用和开发方面具有自己的优点:
1.ASP编写容易,可用任何无格式的文本编辑器编写,程序开发时间短;
2.ASP灵活性好,它的主体是与平台无关的HTML和脚本程序,无需编译、链接直接执行,可适时改变,运行于各种操作环境;
3.ASP程序独立于浏览器,在服务器端执行,相对客户端源代码隐藏,保密性好;
4.ASP是面向对象的,并可扩展使用各种语言编写的ActiveX 服务组件。
3.ASP的内置对象和应用组件
ASP提供了5个内置对象,这五个对象可被ASP脚本直接使用,其中, 使用内置对象1、2可实现Web的交互功能,使用内置对象4、5可解决具有协作机制的应用问题。这五个内置对象是:
1.Request对象 从客户端用户提取信息; Request对象通过两种方式读取浏览器的用户输入信息。其一是读取附带在网址后面的参数;其二是读取HTML输入表单Form里的关键字段内容,如语句Request.Form(“name”)可以 取得 用户填在文本框name里面的内容。
2.Response对象 将信息送给客户端用户;Response的write方法可以直接向HTML文档插入字符串,其格式为:Response.Write 数据 ,如Response.Write Now,该语句向浏览器输出了当前时间; Response还提供了控制流程的方法:Response .Redirect 网址, 将当前网页转到另一个网页;Response.End则中止当前的ASP处理。
3.Server对象 提供Web 服务器工具。Server对象有2个重要方法:MapPath和CreateObject。MapPath用来将Web Server的虚拟路径还原成实际路径。CreateObject用来产生服务器组件的对象实例,服务器组件可以连接服务器数据库、使用网络功能或访问服务器文件系统。要调用服务器组件,必须先利用Server对象中的方法CreateObject产生服务器组件对象实例,即Server.CreateObject(ObjectID),其中ObjectID指定了组件标识,它可以是各种形式的可执行程序,组件产生后,就可以使用它的方法和属性进行工作。
4.Session对象 存储在一次会话(Session)期间的用户信息,仅被该用户访问。Session对象最主要的用途是提供某一次连结所有网页之间的公用信息,多用于网上电子购物中的“购物袋”的制作。
5.Application对象 管理所有的会话信息,供所有用户共享。Application是所有连结所有网页共用的对象,适合用来制作访问计数器。
ASP提供了5个内置服务器组件
1. 数据库访问组件(Database Access)
2. 旋转看板组件(Advertisment Rotator)
3. 浏览器兼容组件(Browser Capabilities)
4. 文件访问组件(TextStream)
5. 文件超链接组件(Content Linking)
其中最重要的两个服务器组件是数据库访问组件ADO DB和文件访问组件FileSystemObject。
4. ADO----ASP的数据库存取组件
ADO是一种基于OLE DB标准的数据库应用编程接口,具有面向对象、与语言无关的特点,适合于在Web环境下访问数据库。 作为一种ASP提供的ActiveX服务端组件,ADO通过组件对象模型(COM)为ASP提供了Web与数据库连结的可编程界面,允许开发人员使用任何语言和统一的编程模式操作各种与ODBC和OLE DB兼容的数据库,其中包括SQL Server、Oracle、Foxpro等各种大、中、小型数据库。在Web环境下ADO的数据存取结构如图2所示。
图2
ADO提供对象使ASP服务器端脚本能够方便的连接和操纵Web数据库,ADO的对象模型下图3所示。
图3
·Connection对象用于建立一个与数据源的连接;
·Command对象用于执行一个SQL命令语句,完成对数据源的操作;
·Recordset对象用于创建一个查询数据库信息的全部结果集;
·Errors集合用于收集ADO运行过程中发生的所有错误,Error对象提供错误的细节,每个Error都对应一个具体的错误;
·Feilds集合包括Recordset对象中的所有字段,Field对象对应某一字段;
·Parameters集合包括所有的Parameter 对象,Parameter对象代表一个基于command对象的参数化查询语句或存储过程中的一个参数。
ADO主要通过Connection对象和Recordset对象完成与数据库的交互。Connection对象用于数据库连结,它是交换数据必须的环境,一个Connection代表一个与数据源的连接。Recordset对象是数据记录集合,ADO使用Recordset对象指代运行操作指令所得到的数据记录集。
使用ADO存取数据库分为四个步骤:
1) 建立一个Connection对象:conn
set conn=Server.CreateObject(“ADODB.Connection”)
2)调用conn.Open方法打开数据库
conn.Open“数据源名称”
3)建立Recordset对象,可调用Connection对象的Execute函数建立
set rs=conn.Excute(“SQL语句”)
4)将Recordset对象内容输出到浏览器
5)关闭结果集对象,断开与数据库的连接
rs.close
conn.close
5.用ASP访问Web数据库的实例
在扬子石化公司环保处的Intranet信息服务系统构建中,我们建立了一台Windows NT服务器,用于实现企业内部的网上数据库信息查询和录入,为示范起见,本实例采用Access数据库,其中的“环保情况通报.mdb”数据库含有数个相关表格。这里给出网上浏览数据库信息的程序, 以及企业相关人员将获取的数据通过浏览器提供的界面插入表格的数据库录入程序及相应界面,这些程序已在网络环境下正确运行。
5.1“环保情况通报”数据库浏览程序
浏览界面为:
环保情况通报浏览程序.asp的程序源代码为:
<%
Table = Request("Table")
If Request("Table") = "" Then Table = "公司下属厂环保处理装置处理率"
%>
<%
Sub RsToTable( rs )
'PartI 其中的<TR><TD>标记让浏览器以表格的形式显示数据
Response.Write "<CENTER><TABLE BORDER=1>"
Response.Write "<TR BGCOLOR=#b0c4de>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
'PartII 以表格形式逐行显示数据库中的数据
While Not rs.EOF '判断是否移过了最后一条
Response.Write "<TR>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
Next
Response.Write "</TR>"
rs.MoveNext '移到下一条
Wend
Response.Write "</TABLE></CENTER>"
End Sub
%>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>环保情况通报浏览程序</title>
</head>
<body background="../CH10/B01.jpg" bgcolor="#FFFFFF">
<form action="环保情况通报浏览程序.asp" method="GET">
<p align="center"><font color="#8080FF" size="6"
face="隶书">环保情况通报</font><font color="#8080FF"
size="5" face="隶书"> </font></p>
<p align="center"><select name="table" size="4">
<option
value="公司下属厂环保处理装置处理率">公司下属厂环保处理装置处理率</option>
<option value="排污费交纳情况">排污费交纳情况</option>
<option value="外排废水综合合格率">外排废水综合合格率</option>
<option value="主要环保指标完成情况">主要环保指标完成情况</option>
<option value="工业废水中主要污染物排放量">工业废水中主要污染物排放量</option>
<option
value="公司下属厂污水一级处理排放合格率">公司下属厂污水一级处理排放合格率</option>
</select></p>
<p align="center"><input type="submit" value="浏 览"></p>
</form>
<hr>
<p align="center">数据库名称:<%=Table%></p>
<hr>
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("环保情况通报.mdb")
Set rs = conn.Execute( Table )
RsToTable rs
%>
</body>
</html>
5.2“主要环保指标完成情况”数据库录入程序
由三部分构成:
1) 数据录入表单HTML文件: 数据录入表单2.htm 界面1
2) 数据录入处理ASP程序: 数据录入处理2.asp
3) 数据显示界面: 主要环保指标完成情况.asp 界面2
数据录入表单显示界面——界面1:
数据提交后由程序“数据录入处理2.asp” 进行处理。“数据录入处理2.asp”的程序源代码为:
<!--#include file="../adovbs.inc" -->
<%
' 将数据中的单引号改成两个单引号,并且在前后加上单引号
Function SqlStr( data )
SqlStr = "'" & Replace( data, "'", "''" ) & "'"
End Function
' 读取各输入框中的数据
xm= Request("xm")
zb = Request("zb")
sy= Request("sy")
wy = Request("wy")
ly=Request("ly")
hj=Request("hj")
zqnzb = Request("zqnzb")
' 检查各项是否输入有数据
If xm="" Or zb="" Or sy="" Or wy="" or ly=""or hj="" or zqnzb=""Then
Response.Write "输入框不能为空白!"
Response.End ' 不再处理以下的程序
End If
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("环保情况通报.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
sql = "Insert Into 主要环保指标完成情况 (项目,指标,四月,五月,六月,合计,占全年指标) Values( "
sql = sql & SqlStr(xm ) & ", "
sql = sql & SqlStr(zb) & ", "
sql = sql & SqlStr(sy) & ", "
sql = sql & SqlStr(wy) & ","
sql = sql & SqlStr(ly) & ","
sql = sql & SqlStr(hj) & ", "
sql = sql & SqlStr(zqnzb) & ")"
conn.Execute sql
' 将网页导致“浏览该数据库”的网页 主要环保指标完成情况.asp
Response.Redirect "主要环保指标完成情况.asp"
%>
以上程序进行数据库录入处理后,通过 Response.Redirect 指令将浏览页面转到数据显示界面,由程序 “主要环保指标完成情况.asp ”完成。“主要环保指标完成情况.asp” 的程序源代码为:
<%
Sub RsToTable( rs )
Response.Write "<CENTER><TABLE BORDER=1>"
Response.Write "<TR BGCOLOR=#b0c4de>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"
While Not rs.EOF
Response.Write "<TR>"
For i=0 to rs.Fields.Count-1
Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
Wend
Response.Write "</TABLE></CENTER>"
End Sub
%>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>数据录入表单</title>
</head>
<body background="../CH10/b01.jpg">
<div align="center"><center>
<table border="1" cellpadding="4" cellspacing="0" width="80%"
bgcolor="#D0D0EC">
<tr>
<td align="center"><font color="#000080" size="5"><b>主要环保指标完成情况</b></font></td>
</tr>
</table>
</center></div>
<hr>
<p>
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("环保情况通报.mdb")
Set rs = conn.Execute( "主要环保指标完成情况" )
RsToTable rs
%>
</p>
</body>
</html>
数据提交后的显示界面:
二、结束语
随着Internet/Intranet技术的发展,企业信息管理系统(MIS)越来越多地采用浏览器/服务器(B/S)结构的应用模式,这使得基于Web的应用程序的开发势在必行,数据库技术更是需要和Web技术相结合,才有更为广阔的前景。通过在扬子石化公司环保处信息服务系统构建中开发Web服务器与数据库接口的实践,作者体会到利用ASP进行Web设计,简单易行、开发效率高,特别适合现代企业作为建立企业Web站点、网上访问数据库的开发工具。可以预见,随着NT和IIS在Internet/Intranet应用领域的覆盖面不断扩大,ASP将成为网上不可或缺的卓越技术。
参考文献
1) 於志渊主编 动态Web网页技术大全 清华大学出版社 1999.10
2) 王国荣著 Active Server Pages & Web数据库 人民邮电出版社 1999.8
3) 裴有福 编著 Web 技术大全 中国水利水电出版社 1998.7
4) 蒋年得 王耀南 Web浏览器与数据库互连的几种 微型机与应用 1999.10
5) 元晋豫 用ASP进行浏览器/服务器模式的Web数据库开发 电脑编程技巧与维护 1999.11
6) 郑文蕴 金玮 杜秀华 用ASP实现网络与数据库的接口 计算机工程 1999.9
7) 梁筱丽 杨建中 Web与数据库的集成 计算机应用研究 1999.9
8) 杨得华 Web 服务器端的动态网页技术 计算机应用研究 1999.10
9) 李坚 张大力 开发动态交互式Web的关键技术 计算机应用研究 1999.10
10) 李绍华 Web查询的关系数据库模型 计算机应用 1999.8
11) 丁明吉 Web服务器与数据库服务器的连接技术 计算机应用 1999.6
12) 王志鹏 张海盛 沈益民 基于Web的综合查询系统的设计与实现 计算机应用 1999.10
13) 刘国丽 王海峰 王永滨 通过WEB访问数据库 电脑技术信息 1999.11
14) 都艺兵 利用ASP创建含有数据库信息的动态页面 微型机与应用 1999.3
15) 元晋豫 用ASP进行浏览器/服务器模式的Web数据库开发 电脑技术信息 1999.10
16) 唐晓晟 张 震 徐惠民 Intranet内部基于数据库的动态信息技术 电子学报 1999.8
17) 冯冲 王翠茹 闫顺林 ASP技术及其在管理信息系统中的应用 中国电力 1999.6
|