建立三层结构的ASP应用程序(3)
作者:佚名 发布时间:2009-01-21 19:41:00
下面我们再创建一个类Employees,并填加如下方法:
首先请注意VB中创建类实例的语法dim oEmployee as new Employee,后面会看到,在ASP中创建类实例的语法是不同的。这个方法检索成绩大于等于60的员工工号,并据此创建一个Employee对象,再将此对象加入私有的集合对象中。下面两个函数遍历集合中的元素:
Public Function GetFirst() as Employee
if colQualifiedList.count>0 then
mnCurrentIndex=1
set GetFirst=colQualifiedList.Item(1)
else
set GetFirst=nothing
end if
End Function
Public Function GetNext() as Employee
mnCurrentIndex=mnCurrentIndex+1
if mnCurrentIndex>colQualifiedList.count then
set GetNext=nothing
else
set GetNext=colQualifiedList.Item(mnCurrentIndex)
End if
End Function
也许你会说,为何不把集合声明Public,这样在ASP中不是可以直接引用吗?确实,这样也行得通,编程实现起来也更简单些,但是,这样做破坏了封装性原则。因为数据以何格式存储完全是商业逻辑层的事,与用户界面层无关,假设有一天你因为每种原因放弃了用集合来存储数据的设计,而改用数组或记录集(Recordset)来存储,那你只需要修改GetFirst和GetNext两个函数,用户界面层完全无需修改。
至此类文件创建完毕,将工程文件存为 test.vbp,选File菜单下的Make test.dll选项将其编译。
3.注册动态链接库
启动Web Server 上的Microsoft Transaction Server (Start--Windows NT Optionpack4--Internet Information Server--Internet Service Manager),展开Microsoft Transaction Server--Computer--My Computer--Package Installed,点鼠标右键选New--Package--Create Empty Package,输入包名Test(这里Test是任选的名字,不一定要与DLL同名),OK-Interactive User-the current Logon user--Finish。双击Test--Component,右键选Component-New-Component-Install New component(s)-- Add File,选择你刚编译好的DLL文件,MTS会发现DLL中有两个类Employee和Employees。至此DLL注册完毕。
4.编写ASP程序
<HTML><Body>
<p>Qualified Employee List</p>
<table border=1 cellspacing=0 cellpadding=0>
<tr>
<td>Employee ID</td>
<td>Name</td>
<td>Gender</td>
<td>Score</td>
</tr>
<%
set oEmployees=server.createobject("Test.Employees")
oEmployees.GetQualifiedList
set oEmployee=oEmployees.GetFirst()
do while not oEmployee is nothing
%>
<tr>
<td><%=oEmployee.EMPLID%></td>
<td><%=oEmployee.Name%></td>
<td><%=oEmployee.Gender%></td>
<td><%=oEmployee.Score%></td>
</tr>
<%
set oEmployee=oEmployees.GetNext()
loop
%>
</table>
</body></html>
注意在ASP中创建类实例的语法set oEmployees=server.createobject("Test.Employees"),其中Test是DLL的名字,Employees是类的名字; 当然,如果一个函数的返回值是一个对象,类似set oEmployee=oEmployees.GetFirst()这样的语法也是可以的。
至此,一个完整的三层结构的应用程序已经完成了,让我们看以下,如果把"合格"的定义改为:只有成绩进入前100名才算合格,程序需要做那些修改。事实上,如果你的数据库系统是SQL Server,你只需把SQL语句改为:
sql="select top 100 EMPLID from Employee order by Score desc" 就已经可以了,即使为了跨数据库系统的兼容性,我们也只需要对GetQualifiedList做如下修改:
......
sql="select EMPLID from Employee order by Score desc"
with rs
.open sql,conn,1,3
if .eof and .bof then
exit sub
else
i=1
do while (not .eof) and (i<=100)
dim oEmployee as new Employee
oEmployee.Create trim(.Fields("EMPLID"))
colQualifiedList.Add oEmployee
set oEmployee=nothing
i=i+1
loop
end if
.close
end with
...
然后把DLL重新编译,注册就可以了,ASP程序完全不必修改。


猜你喜欢
- 1 前言正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好
- python中支持SSH协议的模块主要有Paramiko和netmiko两种,本次实验采用netmiko模块。netmikko模块为pyth
- 1.雷达图程序示例'''1.空白极坐标图'''import matplotlib.pyplo
- 本文实例讲述了Python迭代器定义与简单用法。分享给大家供大家参考,具体如下:一、什么是迭代器迭代,顾名思义就是重复做一些事很多次(就现在
- 本文实例为大家分享了微信小程序实现登陆注册滑块验证的具体代码,供大家参考,具体内容如下一、创建自定义组件MoveVerifyMoveVeri
- 可以利用in运算符来进行判断,如果在指定的序列中找到值返回True,否则返回False。运算符not in表示如果在指定的序列中没有找到值返
- 利用pygame实现了简易版飞机大战。源代码如下:# -*- coding:utf-8 -*-import pygameimport sys
- 1、开头:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定#!/usr/bin/pytho
- 一、前言很多网站提供视频转GIF的功能,但要么收费要么有广告实际上我们通过python,几行代码就能够实现视频转gif二、教程1. 安装必备
- 1. Http标准库1.1 http客户端func main() {response, err := http.Get("http
- 本文实例分析了python字典排序的方法。分享给大家供大家参考。具体如下:1、 准备知识:在python里,字典dictionary是内置的
- a.call和apply方法详解------------------------------------------------------
- mysql 获取规定时间段内的统计数据按年统计SELECT count(*), DATE_FORMAT(orde
- DROP TABLE 数据表名称 (永久性删除一个数据表) 删除记录:delete from&nbs
- VSCode卸载后进行重新安装,发现新安装的还有原来的一些配置,卸载的不彻底,有时候也容易出问题,可按照如下方法卸载干净:1.进入控制面板卸
- 前言python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候s = 'i\'m superman'
- python里dict(字典)怎么变成list(列表)?说明:列表不可以转换为字典1、转换后的列表为无序列表a = {'a'
- 解决MySQL插入时间差八小时问题一般 jdbc url中 需要添加几个参数 , 大多数博客给的教程都是 useSSL=false&
- 1. 需要用到的Python库pygametkinter2. 简易UI设计audio_player = Tk()audio_player.t
- 简介:with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally