使用ASP实现基于WEB的数据库资料系统
发表于:2007-06-30来源:作者:点击数:
标签:
ASP简介 ASP(Active Server Page)是Microsoft公司推出的基于IIS(Inte .net Information Server)的动态网页 开发技术 。ASP都是以ISAPI(Internet Service API)的原理实现的,它通常使用 VB Script语言进行HTML文件的 嵌入式 脚本设计,文件名后缀是.asp。它的
ASP简介
ASP(Active Server Page)是Microsoft公司推出的基于IIS(Inte
.net Information Server)的动态网页
开发技术。ASP都是以ISAPI(Internet Service API)的原理实现的,它通常使用
VBScript语言进行HTML文件的
嵌入式脚本设计,文件名后缀是.asp。它的原理如图1所示。
当浏览器向Web Server发出.asp请求时,Web Server开始运行ASP脚本程序,然后Web Server启动ASP,ASP将所请求的文件从头到尾进行检查,执行文件中的嵌入的ASP脚本,最后将执行结果HTML网页返回给Web Server。Web Server再将该HTML网页发送给客户端。这样,用户可以根据浏览器发出的请求设计ASP脚本,从而由不同的请求产生不同的脚本执行结果。ASP具有许多优点(如使用简单,执行效率较高等),但它同时也具有其先天的弱点,即它使用的是
脚本语言,功能有限,难以完成许多复杂的业务功能。微软为了弥补这一弱点,提供了在ASP中使用ActiveX组件的功能,从而许多复杂的功能就可以用其它许多高级语言(如Visual C++)来实现,然后将这些功能包装为ActiveX,供ASP调用。ADO(ActiveX Data Object)就是在ASP中常用的数据库访问组件。
WEB数据库资料系统实现的关键技术
要实现基于WEB的数据库资料系统,关键要解决两个方面的问题。第一要实现将客户端文件资料通过浏览器上载到WEB服务器,并将文件内容保存到数据库中;第二要实现从数据库中读取资料内容,并将内容发送到客户端浏览器。为说明如何实现这两项技术,我们用一个简单的数据库进行示例(这里使用的数据库环境是MS SQL Server 6.5),这个数据库只有一个表(UploadFile),其结构如图2所示。
其中,id字段是关键字,自增类型;Title表示资料标题;FileName是上载的资料文件名;Content字段如何存放二进制资料文件内容。下面将讲述实现将客户端文件资料通过浏览器上载到WEB服务器,并将文件内容保存到数据库中以及如何从数据库中读取资料内容,并将内容发送到客户端浏览器。WEB服务器平台是
Windows NT Server 4.0 + IIS4.0 +SQL Server 6.5,客户端使用IE4.0,系统调试通过。
使用ASP实现文件上载到WEB服务器
基于Web方式上载文件,要遵从RFC1867标准(IE3.0和Netscape 3.0 以上版本浏览器都支持)。但IIS没有提供这方面的支持。因此要使用ASP实现文件上载,必须调用相应的ActiveX组件,这个ActiveX组件ASP本身没有提供,可以自己开发(根据RFC1867标准),也可以使用第三方提供的组件。这里介绍的方法使用第三方的组件ASPUpload.dll,在使用前必须先在WEB服务器上注册(将ASPUpload.dll拷贝到\winnt\system32目录下,然后云运行“regsvr32 aspupload.dll”)。
其中客户端源文件如下(uploadTest.htm):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件上载客户端</title>
</head>
<body>
<form method="POST" action="uploadTest1.asp" enctype="multipart/form-data"
name="UPloadForm">
<p><input type="file" Name="File1"> </p>
<p><input type="submit" value="Submit" name="Upload"></p>
</form>
</body>
</html>
其中客户端文件要注意两点:
* 文件上载提交表单(Form)的enctype必须指定为“multipart/form-data”
* 语句<input type="file" Name="File1">表示上载文件域,用户可以在该域中输入或选定文件。
服务器端源文件如下(uploadTest1.asp):
<%response.buffer=true%>
<html>
<%Set Upload=Server.createobject("Persits.Upload.1") @#创建文件上载组件
Count=Upload.Save("e:\aspupload") @#将客户端文件保存到WEB服务器端的本地硬盘上%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Upload Test</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<p>上载了<%=Count%>个文件</p>
<p>File has been uploaded.</p>
</body>
</html>
其中,脚本Set Upload=Server.createobject("Persits.Upload.1")创建了文件上载组件,该组件通过调用Save方法将浏览器端的文件内容保存到指定路径。
将文件存在数据库中
将文件保存在数据库中主要用了ASPUpLoad组件中文件对象的ToDatabase方法。源文件如下:
客户端源文件(uploadToDB.htm):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件上载客户端</title>
</head>
<body>
<form method="POST" action="UploadToDB.asp" enctype="multipart/form-data"
name="FormUpload">
<p><input type="file" name="FileUpload"> </p>
<p><input type="submit" value="上载" name="B1"></p>
</form>
<p><a href="readFile.asp">读取数据库中文件</a></p>
</body>
</html>
服务器端源文件(uploadToDB.asp):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>文件上载到数据库</title>
</head>
<body>
<%Set Upload=Server.createobject("Persits.Upload.1")
Count=Upload.Save("e:\aspupload")
on error resume next
set FileObj=Upload.Files("FileUpload")
SQL="insert into upLoadFile (Title,FileName,Content) values (@#"&FileObj.Path&"@#,@#"&FileObj.Path&"@#,?)"
response.write SQL
FileObj.ToDatabase "DSN=FileUpload;UID=sa;",SQL
if Err<>0 then
Response.write "Error Saving the file:"&Err.Description
else
FileObj.delete
response.write "Su
clearcase/" target="_blank" >ccess!"
end if
%>
</body>
</html>
从数据库中读取文件内容并发送给客户端浏览器
从数据库中读取内容在发送给浏览器之前,首先必须让浏览器知道内容的数据类型,这通过向客户端发送ContentType描述实现。为简单起见,这里假设发送的内容是Word文档,并且显示最新插入的记录。源文件如下:
客户端源文件为uploadToDB.htm(同上一部分的客户端文件)。
服务器端源文件(readFile.asp):
<%Response.Expires = 0
response.buffer=true%>
<%response.clear
Response.ContentType = "application/msword"
set conn=server.createobject("adodb.connection")
conn.open "DSN=FileUpload;UID=sa;"
set rs1=conn.execute("select maxid=max(id) from uploadFile")
SQL="select * from uploadFile where id="&rs1("maxid")
set rs=conn.execute(SQL)
Response.BinaryWrite rs("Content")
rs.close
rs1.close
conn.close
Response.End
%>
其中,Web Server向客户端发送Content-Type="application/msword",使客户端认为这是Word文档,然后服务器从数据库中读取文件内容(为简单起见,假定是数据库中最后一条记录),然后以二进制流的方式向客户端发送(调用ASP内置对象Response的BinaryWrite方法)。当客户端接收到这些内容后便自动启动Word OLE服务,使Word控件嵌在浏览器IE中将收到的内容格式化显示。
总结
综上,通过使用ASP脚本和文件上载组件及ADO组件,可以方便地实现WEB数据库资料系统的关键技术。有了上述技术,对于基于WEB的数据库资料的简单系统便可以很容易地得到扩充和实现。笔者以上述技术为核心开发了一套Internet上的数据库档案资料管理系统,系统非常稳定可靠(很大一部分要归功于aspUpload组件的稳定性),档案内容包含html、word、excel、文本、图像等各种格式,档案资料的管理、维护和检索十分方便,受到用户的一致好评。
原文转自:http://www.ltesting.net