摘 要:随着Internet的兴起与迅猛发展,怎样有效开展网络远程教育正成为当今教育的一个热点问题,网络教育中的资源信息集成正在转向以Intranet技术为主导。该文主要解决开发WWW网络教育应用软件时经常会遇到的问题:远程数据导入导出,并提出了解决方案和实现方法。
关键词:Web应用;ASP;文件上传;导入;导出
随着Internet 应用在全球的迅速普及,网络教育日趋广泛, 越来越多的教育机构和企业采用Internet/Intranet/Extranet 技术组建自己的教育信息组织与管理平台, 基于WWW和TCP/IP 的B/S模式正逐步取代传统的C/S模式成为信息集成的主流。 在网络资源管理系统开发中经常要提供从客户端对远程服务器端数据库的数据导入与导出功能,本文就这种机制的实现进行探讨。
1 系统总体框架
目前较好的B/S 解决方案是采用ASP+ADO 的方法, 利用三层结构构造WEB应用程序。ASP(Active Server Page)是Microsoft 公司开发的服务器端脚本编写环境,ASP页是包括HTML标记、文本和脚本命令(用VBScript,JScript脚本语言)的文件。同时ASP可调用Java Applet 和ActiveX组件来开发动态的、交互的、高性能的WEB服务器应用程序。ADO提供了在ASP Web 页面内访问数据的功能。它提供了数据库连接、查询结果集等对象,利用ASP环境可以对这些对象进行编程,完成对各种ODBC数据源的操作。系统的体系结构如下:
WEB 浏 览 器
WEB 浏 览 器
WEB服务器(IIS)
Active Serve Page(ASP文件)
ActiveX脚本
VBscript
ADO组件
File Access
组件
数据库
激活组件(COM)
ODBC/OLE DB 连接
图1 ASP+ADO 总体框架
客户端浏览器通过表单访问WEB服务器上的ASP页面,服务器执行ASP文件可以激活ADO组件,利用ODBC/OLE DB 连接访问数据库服务器。文件系统的访问可以利用File Access 组件实现。
WEB应用软件的使用者,由于学习需要经常要在客户端进行远程数据库的导入或导出操作。为达到导出数据的目的,WEB应用程序中可以先把数据库转为文件再通过WWW机制下载文件来实现。同样数据导入可以先通过WWW机制把数据以文件形式上载到WEB服务器,再通过读文件把数据插入数据库来实现。文件的上载和下载可以通过调用第三方组件来实现,我们这里使用一种常用且功能完备的组件ASPSmartUpload。
2技术细节
2.1通过ADO ODBC DSN---less连接数据库,这种方式不需要建立ODBC 系统DSN
以连接SQL数据库为列:
Set adocon=Server.CreateObject(“ADODB.Connection”)
Adocon.Open”Drive={SQL Server};Server=(Local);UID=xxx;PWD=yyy;database=zzz;”
其中的UID是登录SQL SERVER的“帐号名称”(本列是xxx),PWD则是“密码”(yyy),database属性是欲连接的“数据库名称”(zzz)
2.2利用ADO Connection 与Recordset 对象进行数据库查询
strSQL=“Select * From tablename Where condition”
建立SQL查询语句
Set RS=adocon.Execute(strSQL)
利用Connection 对象的Execute方法执行SQL查询语句,返回Recordset对象
2.3 File Access 组件的FileSystemObject与TextStream对象的文件处理功能
Set objFS=Server.CreateObject(“Scripting.FileSystemObject”)
建立FileSystemObject对象实例objFS
Set objReadTS=objFS.OpenTextFile(filename[,iomode[,create[,format]]])
调用FileSystemObject 对象的OpenTextFile方法打开文件以备读,同时返回TextStream对象objReadTS。
Set objWriteTS=objFS.CreateTextFile(filename[,overwrite[,Unicode]])
调用FileSystemObject 对象的CreateTextFile方法建立文件以备写,同时返回TextStream对象objWriteTS。
2.4用ASPSmartUpload组件上载和下载文件
dirUpload = "/gdzcgl/ruanjiangl/backup"
指定文件上载后的存储路径
Set objUpload=Server.CreateObject("AspSmartUpLoad.SmartUpLoad")
objUpload.UpLoad
建立SmartUpload对象,调用其上载方法
intNo = objUpload.Save(dirUpload)
将上载后的文件存储到dirUpload 指定的路径
3具体实现
3.1数据导入
下面是客户端界面网页的设计,采用HTML语言和VBScript脚本实现用HTML的FORM标记中嵌入多个file型INPUT标记来实现一次可上载多个文件,VBScript脚本部分用于检查用户是否指定欲上载的文件
<HTML>
<head>
<title>导入</title>
</head>
<BODY>
<FORM METHOD="POST" Name="upload" ACTION="imdata.asp" ENCTYPE="multipart/form-data">
<p>
系统数据<INPUT TYPE=FILE SIZE=50 NAME="file1">
<p>
单位数据<INPUT TYPE=FILE SIZE=50 NAME="file2"></p>
<p>
软件数据<INPUT TYPE=FILE SIZE=50 NAME="file3"></p>
<p align="center"><input type="reset" value="全部重写" name="B2">
<input type="submit" value="提交" name="B1">
</FORM>
</BODY>
</HTML>
上面的HTML文件通过表单把将要上载的文件交给imdata.asp文件处理,首先通过ASPSmartUpload
组件将文件上载到WEB服务器的指定路径下,然后在客户端回显成功上载的文件信息,接着连接需要的数据库,通过读文件把数据逐条插入数据库。下面是具体代码:
<HTML>
<head><title>dataimport</title>
</head>
<BODY>
<%
Dim linenum
Dim strofline
Dim objUpload, intNo, File
dirUpload = "/gdzcgl/ruanjiangl/backup" ‘指定服务器端保存上载文件的路径
Set objUpload=Server.CreateObject("AspSmartUpLoad.SmartUpLoad")
objUpload.UpLoad ‘上载文件
intNo = objUpload.Save(dirUpload) ‘保存文件
FullPath=Server.MapPath("/gdzcgl/ruanjiangl/backup/dwbak.txt")
Set objFS=Server.CreateObject("Scripting.FileSystemObject")
Set objReadTS=objFS.OpenTextFile(FullPath,1,-1,0) ‘打开上载的文件,以读取数据
objReadTS.ReadLine
linenum=4
‘建立数据库连接
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open"Driver={SQL Server};Server=(Local);UID=sa;PWD=system;DATABASE=pubs;"
‘用SQL 语句清空原有的表数据
SQL1="DELETE rdw"
Set RS1=Conn.Execute(SQL1)
‘读文件且把数据插入数据库表中
Do While Not objReadTS.AtEndOfStream
strofline=objReadTS.ReadLine
strofline=CStr(strofline)
aryn=Split(strofline," ")
SQL2="insert into rdw values("
For i=0 to linenum-2
SQL2=SQL2 & "'" & aryn(i) & "'" & ","
Next
SQL2=SQL2 & "'" & aryn(linenum-1) & "'" & ")"
‘执行 SQL语句
Conn.Execute(SQL2)
Loop
%>
</BODY>
</HTML>
3.2远程数据导出
客户端可以通过在HTML文件中嵌入超级链接激活一个ASP文件来实现,代码略。
下面主要介绍ASP文件的实现:
<%
‘指定欲建立的文件
FullPath=Server.MapPath("/gdzcgl/ruanjiangl/backup/dwbak.txt")
Set objFS=Server.CreateObject("Scripting.FileSystemObject")
Set objWriteTS=objFS.CreateTextFile(FullPath,-1,0)
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open"Driver={SQL Server};Server=(Local);UID=sa;PWD=system;DATABASE=pubs;"
’用SQL语句查询欲导出的数据
SQL1="select * from rdw"
Set RS1=Conn.Execute(SQL1)
‘从RecordSet对象中逐条读取数据并写入文件
For i=0 to RS1.Fields.Count-1
objWriteTS.Write(RS1(i).Name)
objWriteTS.Write(" ")
Next
objWriteTS.WriteLine
Do While Not RS1.EOF
For i=0 to RS1.Fields.Count-1
objWriteTS.Write(RS1(i))
objWriteTS.Write(" ")
Next
objWriteTS.WriteLine
RS1.MoveNext
Loop
objWriteTS.Close
RS1.Close
conn.Close
‘通过建立ASPSmartUpload组件的SmartUpload对象,并调用其DownLoadFile方法
‘把建立的文件下载到客户端
Dim MyUpLoad
Set MyUpload = Server.CreateObject("AspSmartUpLoad.SmartUpLoad")
MyUpload.DownloadFile "/gdzcgl/ruanjiangl/backup/dwbak.txt","application/x-zip-compressed" %>
上面的ASP文件的主要处理逻辑如下:
在WEB服务器的指定路径下建立一个文件备写。
连接需要的 SQL 数据库,从指定的表中查询到所需数据
把上面查到的数据库记录逐条写入文件
调用ASPSmartUpload组件的SmartUpload对象的DownloadFile 方法把指定文件下载到客户端
4.总结
上面的远程数据导入、导出技术已经在高校国有资产管理系统中得到很好的应用,现在写出来希望能为我们开发网络资源管理系统中所涉及的数据库问题提供一个解决方案。这种技术较其它方案如通过FTP或邮件等具有可集成性和易使用性,可直接移植到其他WEB应用中而无须重写代码。
作者:
王凤蕊1 ,王文宏2
华东师范大学教育信息技术学系2000研 上海 200062 wfrsh@163.net
北京化工大学计算机系 102信箱 北京 100029 wenhongonline@263.net 参考文献
[1] 廖信彦,编著.Active Server Page 3彻底研究.北京: 中国铁道出版社,2000年.
[2] 汪晓平等 ASP网络开发技术 北京:人民邮电出版社
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。