作者;小刀
使用asp编程的一大优点是可以使用众多的服务器组件(activex server components)。这些组件提供诸如广告轮显
(ad rotator)、浏览器兼容(browser capabilities)、数据库存取(database access)、文件超链接(content
linking)、文件存取(file access)等等功能。使用服务器组件,可以通过非常简单的方式高效率地完成各种复杂的工
作。
一般,asp的各个组件通常使用 server.createobject 方法来创建。例如,创建一个ad rotator 组件可用:
<%
set ad = server.createobjet (“mswc.adrotator”)
%>
在asp的各个组件中,activex data object(ado)组件有着极为重要的作用。它是一种可以提供web页面设计开发人
员快速存取internet的数据库,并在用户端实现网上实时更新显示的web数据库技术;ado几乎兼容于各种数据库系统,而
且跨越多种不同的程序语言开发环境。
例如,我们在网上向本公司的客户群提供各种硬件的升级程序,与此同时,我们希望能够记录下客户的相关资料。在
以前,这种web上的交互操作一般采用cgi来完成,不仅难以书写和维护,而且对处理器的消耗很大。现在,我们使用asp的
ado组件,就可以在短短的两个小时轻轻松松的完成以前需要三天才能完成的开发工作,而且还不必花费太多的时间和精力
放在维护上。
首先,我们需要写一个供用户填写资料的表格页面,或者我们还可以将这个页面与后面的asp处理程序放在同一个文件
里,只需要我们在<form>代码中注明action的对象是本程序(要么就什么都不写)。
假定我们的程序名是download.html,下面是原代码:
<html>
<body>
`声明提交方法及传递信息的方式
<form method="post" action="download.asp">
<font face=arial>
<table border="0" align=center>
<tr>
<td><font color="black" size="2"><b>name:</b></font></td>
<td><input type="text" size="30" name="name"></td>
</tr>
<tr>
<td><font color="black" size="2"><b>telephone:</b></font></td>
<td><input type="text" size="30" name="telephone"></td>
</tr>
<td><font color="black" size="2"><b>e-mail:</b></font></td>
<td><input type="text" size="30" name="email"></td>
</tr>
<tr>
<td><font color="black" size="2"><b>address:</b></font></td>
<td><input type="text" size="30" name="address"></td>
</tr>
<tr>
</table>
<hr>
<table align=center><tr>
<td><input type="submit" value="submit"></td>
<td width=30></td>
<td><input type="reset" value="reset"></td>
</tr></table>
</font>
</form>
</body>
</html>
然后,我们开始编写数据处理程序download.asp。
<script language=vbscript runat=server>
`设置缓冲区属性
response.buffer=true
dim name
判断有关字段是否为空
if len(request.form("name"))=0 then
name="not entered"
else
不为空时,利用response对象让server获取表格中“name”字段内容
name=request.form("name")
end if
dim telephone
if len(request.form("telephone"))=0 then
telephone="not entered"
else
telephone=request.form("telephone")
end if
dim address
if len(request.form("address"))=0 then
address="not entered"
else
address=request.form("address")
end if
由于我们将采取email发送的方式将该下载软件提供给用户,所以我们必须要求客户提供 有效的email地址。
dim email
email=request.form("email")
`判定客户填写的“email”资料中是否含有特别字符“@”
if instr(email,"@")=0 then
`若为否,引导客户至“back.htm”的提示页面。
response.redirect("back.htm")
else
建立数据库连接通道
set objconn = server.createobject("adodb.connection")
打开需要的数据库
objconn.open("download")
创建对象接口
set objrst = server.createobject("adodb.recordset")
set objrst.activeconnection = objconn
设定对数据库更新数据时的锁定机制为:数据在更新时并未锁定其他用户的动作。
objrst.locktype = 3
数据库源
objrst.source = "client"
控制数据更新后过滤下载的数据类型
objrst.cursortype = adopenkeyset
将从表格内获取的资料传送到web服务器上的数据库
objrst.open
objrst.addnew
objrst("company") = company
objrst("name") = name
objrst("telephone") = telephone
objrst("fax") = fax
objrst("email") = email
objrst("address") = address
objrst.update
objrst.close
关闭连接
objconn.close
下面是利用iis4.0附带的email组件cdonts发送邮件
dim objmail
建立一个email组件
set objmail=server.createobject("cdonts.newmail")
邮件发送者的email地址
objmail.from="me@hotmail.com"
邮件接收者的email地址
objmail.to=email
邮件的标题
objmail.subject="thank you!"
邮件的正文
objmail.body="this is the software of virtual drive 2000 network."
在邮件里附加文件,“绝对路径”,“文件名”。若为url地址,则改为objmail.attachurl
objmail.attachfile "d:/power/download/vdn2kdm.exe", "vdn2kdm.exe"
发送邮件
objmail.send
将email对象从内存中清除
set objmail=nothing
response.write "<p><font face=arial size=3 color=blue><b>thank you!<br>we have sent the file pass your
email, please wait…</b></font></p>"
end if
</script>
到这里,一个很不错的web数据库交互操作程序就大功告成,而且,它还带有向客户发送email的功能,方便客户利用
email下载较大的文件。如果有什么疑问或更好的建议,欢迎与小刀联系:knife@ctn.com.cn
