st.Form("mail")
message=request.Form("message")
if trim(user)&"x"="x" or trim(pass)&"x"="x" then (检测user值和pass值是否
为空,可以检测到空格)
response.write("注册信息不能为空")
else
set rs=server.CreateObject("adodb.recordset")
sqlstr="select * from user where user='"&user&"'" (查询user数据表中的user
字段其中user字段为字符型)
rs.open sqlstr,conn,1,3
if rs.eof then
rs.addnew
rs("user")=user
rs("pass")=pass
rs("qq")=qq
rs("mail")=mail
rs("message")=message
rs.update
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write("注册成功")
end if
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write("注册重名")
%>
(b)查询字段为数字型
<%
dim num
num=request.Form("num")
set rs=server.CreateObject("adodb.recordset")
sqlstr="select * from message where id="&num (查询message数据表中id字段的
值是否与num相等,其中id为数字型)
rs.open sqlstr,conn,1,3
if not rs.eof then
rs.delete
rs.update
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write("删除成功")
end if
rs.close
conn.close
set rs=nothing
set conn=nothing
response.write("删除失败")
%>
<6>几个简单的asp对象的讲解
response对象:服务器端向客户端发送的信息对象,包括直接发送信息给浏览器,重新定向URL,
或设置cookie值
request对象:客户端向服务器提出的请求
session对象:作为一个全局变量,在整个站点都生效
server对象:提供对服务器上方法和属性的访问
(a) response对象的一般使用方法
比如:
<%
resposne.write("hello, welcome to asp!")
%>
在客户端浏览器就会看到 hello, welcome to asp! 这一段文字
<%
response.Redirect(" www.sohu.com")
%>
如果执行这一段,则浏览器就会自动连接到 “搜狐” 的网址
关于response对象的用法还有很多,大家可以研究研究
request对象的一般使用方法
比如客户端向服务器提出的请求就是通过request对象来传递的
列如 :你在申请邮箱的所填写的个人信息就是通过该对象来将
你所填写的信息传递给服务器的
比如:这是一段表单的代码,这是提供给客户填写信息的,填写完了按
“提交”传递给request.asp文件处理后再存入服务器数据库
<form name="form1" method="post" action="request.asp">
<p>
<input type="text" name="user">
</p>
<p>
<input type="text" name="pass">
</p>
<p>
<input type="submit" name="Submit" value="提交">
</p>
</form>
那么request.asp该如何将其中的信息读入,在写入数据库,在这里就要用到
request对象了,下面我们就来分析request.asp的写法
<%
dim name,password (定义user和password两个变量)
name=request.form(“user”) (将表单中的user信息传给变量name)
password=request.form(“pass”) (将表单中的pass信息传给变量password)
%>
通过以上的几句代码我们就将表单中的数据读进来了,接下来我们要做的就是将
信息写入数据库了
返回一个 Integer,指出变量的子类型。
语法
VarType(varname)
必要的 varname 参数是一个 Variant,包含用户定义类型变量之外的任何变量。
返回值
常数 |
值 |
描述 |
vbEmpty |
0 |
Empty(未初始化) |
vbNull |
1 |
Null(无有效数据) |
vbInteger |
2 |
整数 |
vbLong |
3 |
长整数 |
vbSingle |
4 |
单精度浮点数 |
vbDouble |
5 |
双精度浮点数 |
vbCurrency |
6 |
货币值 |
vbDate |
7 |
日期 |
vbString |
8 |
字符串 |
vbObject |
9 |
对象 |
vbError |
10 |
错误值 |
vbBoolean |
11 |
布尔值 |
vbVariant |
12 |
Variant(只与变体中的数组一起使用) |
vbDataObject |
13 |
数据访问对象 |
vbDecimal |
14 |
十进制值 |
vbByte |
17 |
位值 |
vbUserDefinedType |
36 |
包含用户定义类型的变量 |
vbArray |
8192 |
数组 |
注意 这些常数是由 Visual Basic 为应用程序指定的。这些名称可以在程序代码中到处使用,以代替实际值。
说明
VarType 函数自身从不对 vbArray 返回值。VarType 总是要加上一些其他值来指出一个具体类型的数组。常数 vbVariant 只与 vbArray 一起返回,以表明 VarType 函数的参数是一个 Variant 类型的数组。例如,对一个整数数组的返回值是 vbInteger + vbArray,或 8194。如果一个对象有缺省属性,则 VarType (object) 返回对象缺省属性的类型。
第四章 VBScript基础
4.1 VBScript概述
4.1.1 脚本语言和脚本引擎
HTML是一种页面格式语言,设计制作具有交互功能的动态网页,仅使用HTML是不够的,需要在HTML代码中嵌入一些用高级语言编写的程序,这些被嵌入的高级语言被称为“脚本语言”。用脚本语言编写的网页在每次下载到浏览器时都可以是不同的,而且对于用户的操作可以做出回应。
处理特定脚本语言的应用程序被称为“脚本引擎”。使用脚本语言之前,必须在Web服务器上安装相应的脚本引擎。由于ASP中内置了支持VBScript和Jscript的脚本引擎,所以在编写ASP脚本时,可以直接使用VBScript和Jscript。
VBScript(Visual Basic Scripting Edition)是微软公司开发的一种脚本语言,也是ASP默认的脚本语言,本章主要介绍与之相关的内容。
4.1.2 服务器端脚本和客户端脚本
在ASP程序中可以嵌入服务器端脚本和客户端脚本。服务器端脚本首先在服务器执行,然后将执行结果——标准HTML文件传送给客户端浏览器。客户端脚本则直接传送到客户端浏览器,由浏览器解释执行。
4.1.3 VBScript程序的书写规则
1. 在HTML程序中嵌入VBScript程序的一般形式:
<SCRIPT Language=″VBScript″ RUNAT=″Server|Client″>
VBScript程序
</SCRIPT>
说明:
⑴ 属性RUNAT用于指定脚本运行的位置,Client表示脚本在客户端运行,Server表示脚本在服务器端运行,默认为Client。
⑵ 将VBScript 程序写入到<SCRIPT>与</SCRIPT>中,或者<%…%>中,嵌入HTML文档。
⑶ 由于VBScript是ASP默认的脚本语言,所以也可以将服务器端运行的VBScript脚本直接写入<%…%>标记中。
2.VBScript程序的注释行
VBScript程序的注释语句是非执行语句,注释行以REM或单引号“′”开头,其一般格式如下:
REM 注释内容
′注释内容
例4.1 注释语句应用示例。
<%
Dim T
T=NOW() ′将当前时间保存到变量T中
′引用Response对象的Write方法将当前时间发送到浏览器
Response.Write ″现在的时间是:″&T
%>
3.VBScript程序的书写
⑴ VBScript程序不区分大小写。
⑵ VBScript以ENTER作为语句的结束符。需要续行时,在上一行的行尾加上续行符下划线“_”。
4.1.4 VBScript程序的建立与执行
VBScript程序是纯文本文件,可以使用普通的文本编辑器编辑,但必须以.asp作为文件扩展名。VBScript程序不能单独执行,必须在浏览器或服务器上执行。步骤如下:
⑴ 将Web发布路径设为e:asp,将文件保存到e:asp中;
⑵ 在IE浏览器地址栏中输入http://localhost/asp/ASP文件名.asp;
⑶把保存.asp 程序的目录设置为允许执行脚本或允许执行程序,否则服务器将拒绝执行。
例4.2 ASP程序的建立与执行。
步骤1:打开记事本,输入下列程序代码,并以文件名E4_2.asp保存到C:InetPubwwwrootasp下。
<% @ Language=″VBScript″%>
<% Option Explicit %>
<HTML>
<HEAD><TITLE>今天工作吗</TITLE></HEAD>
<BODY>
<%
Dim Day
Day=WeekDay(Date())
IF Day=1 OR Day=7 THEN
Response.Write ″今天是″&Date()&″,法定休息日″
ELSE
Response.Write ″今天是″&Date()&″,法定工作日″
END IF
%>
</BODY>
</HTML>
步骤2:运行程序。在IE地址栏中输入http://localhost/asp/E4_2.asp,执行结果如图4-1 所示。
步骤3:查看传到浏览器端的HTML文档。在IE窗口的“查看”菜单中选择“源文件”,显示结果如图4-2所示。
4.2 常量、变量与运算符
4.2.1 VBScript的数据类型
VBScript只支持一种数据类型,称variant。但在使用过程中VBScript可以根据在变量中实际存储的数据识别其类型。VBScript可以识别的数据类型称为子类型,除了常见的数值型和字符型等子类型外,主要的子类型见表4-1。
表4-1 VBScript的数据子类型
子类型 |
说 明 |
Empty |
空类型。 |
Null |
无效类型。 |
Boolean |
布尔类型。其值为True或False。 |
Byte |
字节类型。其值为0~255之间的整数。 |
Integer |
整数类型。其值为-32768~32767之间的整数。 |
Currency |
货币类型。取值范围:-922337203685477.5808~922337203685477.5807 |
Long |
长整型。其值为-2147483648~2147483647之间的整数。 |
Single |
单精度浮点型。负数取值范围:-3.402823E38~-1.401298E-45
正数取值范围:1.401298E-45~3.402823E38。 |
Double |
双精度浮点型。
负数取值范围:-1.7976313486232E308~-4.94065645841247E-324
正数取值范围:4.94065645841247E-324~1.7976313486232E308 |
Date(Time) |
日期类型。表达日期和时间值,必须用一对#号将其括起来,例如:#4/8/2002#、#9:04:23 AM#等。 |
String |
字符串类型。最大长度为20亿个字符。 |
3.2.2 VBScript的变量
和其他高级语言一样,VBScript的变量指在脚本运行过程中其值可变的量。定义变量的一般形式如下:
DIM 变量名1[,变量名2,…]
说明:
⑴ 变量名必须是以字母开头的字符序列,其中不能包含句点“.”。
⑵ VBScript的变量名不区分大小写,变量名长度不能超过255个字符。
⑶ 一般而言,VBScript的变量在使用之前可以不预先定义。但是OPTION EXPLICIT语句强制所有变量必须预先声明。该语句必须置于所有ASP处理程序之后、HTML和脚本程序之前,例如:
<% @ Language=″VBScript″%>
<% Option Explicit %>
<%
Dim A,B,C
%>
⑷ 变量一经定义,被自动赋值为EMPTY。
4.2.3 数组
1.数组的定义
VBScript中数组是一种特殊的变量。数组在使用前必须先定义。数组的定义和命名规则与普通变量相同,定义数组的一般形式:
DIM 数组名(下标1[,下标2,…])
说明:
⑴ VBScript数组下标从0开始。
⑵ VBScript支持数组的最大维数是60。
⑶ 下标上界定义了数组的元素个数,即数组的大小,一经定义,数组的大小不能改变。
4.2.4 VBScript的常量
VBScript可以定义常量,用来代替数值、日期或字符串。常量和变量有相似之处,他们的区别在于变量在脚本运行期间可以重新赋值,而常量则不行。定义常量的一般形式如下:
CONST 常量名=表达式
说明:VBScript提供了一些内部常量,大多数内部常量名以“VB”开头。
例4.4 常量的说明。
<%
CONST a=123.45 ′定义数值型常量a
CONST b=″123.45″ ′定义字符型常量b
CONST c=#1-8-2002# ′定义日期型常量c
%>
在多个.asp文件中使用的常量,可以集中在一个单独的文件中定义,然后在需要使用这些常量的.asp文件中用#Include命令包含这些定义。关于#Include命令,详见4.2。
4.2.5 VBScript的表达式和运算符
VBScript中支持四种运算,即算术运算、连接运算、逻辑运算和关系运算。
1. 算术运算符
算术运算符用来对数值型的数据进行处理,运算结果仍为数值型。
表4-2 算术运算符
运算符 |
应用举例 |
计算结果 |
加法运算符(+) |
45+13 |
58 |
减法运算符(-) |
58-13 |
45 |
乘法运算符(*) |
2*3 |
6 |
除法运算符(/) |
5/2 |
2.5 |
整除运算符() |
52 |
2 |
幂运算符(^) |
3^2 |
9 |
模运算符(MOD) |
10MOD3 |
1 |
2. 连接运算符
连接运算符用来连接两个字符串。VBScript的连接运算符有两个:“&”和“+”。
&运算符:当参与运算的数据中出现非字符型类型,&运算符先将其转换为字符型,然后再进行连接操作。
+运算符:当参与运算的数据中出现非字符型类型,+运算符先将其转换为数值型,然后再进行加法操作。
例如:
<%
a=″12″+13 ′a的值为25
b=″12″&13 ′b的值为″1213″
%>
3. 关系运算符
关系运算符用于比较两个数据,并根据比较的结果返回True、False或Null。关系运算符往往用来构造比较简单的判断条件。
表4-3 关系运算符
运算符 |
应用举例 |
计算结果 |
等于关系(=) |
″abc″=″ABC″ |
FALSE |
不等于关系(<>) |
″abc″=″ABC″ |
TRUE |
大于关系(>) |
123>234 |
FALSE |
小于关系(<) |
″ABC″<234 |
FALSE |
小于等于(<=) |
123<=234 |
TRUE |
大于等于(>=) |
123>=123 |
TRUE |
4. 逻辑运算符
逻辑运算符对布尔型数据进行运算,运算结果为布尔型。逻辑运算符往往用来构造比较复杂的判断条件。
表4-4 逻辑运算符
运算符 |
运算规则 |
逻辑与(AND) |
两个数据同为TRUE,返回TRUE。否则返回FALSE。 |
逻辑或(OR) |
两个数据同为FALSE,返回FALSE。否则返回TRUE。 |
逻辑非(NOT) |
一个数据为TRUE,返回FALSE。为FALSE,则返回TRUE。 |
逻辑异或(XOR) |
两个数据同为TRUE或FALSE,返回FALSE。否则返回TRUE。 |
逻辑等价(EQV) |
两个数据同为TRUE或FALSE,返回TRUE。否则返回FALSE。 |
5. 运算符的优先级
VBScript的表达式中可以含有不同的运算符,表达式的计算顺序从左至右,先括号内后括号外,按运算符的优先级从高到低依次进行。VBScript的运算符按从高到低的顺序排列如下:
运算符 |
说明 |
^ |
幂运算 |
- |
负号 |
*和/ |
乘法和除法 |
|
整除 |
MOD |
模运算 |
+和- |
加法和减法 |
+和& |
连接运算 |
=、<>、>=、>、<=、<、IS |
关系运算符 |
NOT |
逻辑非 |
AND |
逻辑与 |
OR |
逻辑或 |
XOR |
逻辑异或 |
EQV |
逻辑等价 |
表4-5 VBScript运算符的优先级
4.2.6 VBScript的常用标准函数
VBScript提供了丰富的标准函数,本节介绍其中一些常用的函数。
1. 数学运算函数
函数 |
功能说明 |
应用示例 |
Abs() |
返回数值表达式的绝对值 |
Abs(-5),返回5 |
Int() |
返回数值表达式的整数部分 |
Int(-12.3),返回-13 |
Fix() |
返回数值表达式的整数部分。在数值表达式的值小于0时,与Int()有区别。 |
Fix(-12.3)
返回-12 |
Sgn() |
数值表达式的值大于0,返回1;小于0,返回-1;等于0,返回0。 |
Sgn(-10),返回-1 |
Round() |
对数值表达式中指定位置上的值四舍五入。 |
Round(234.56,2)
返回234.6 |
Sqr() |
返回数值表达式的平方根 |
Sqr(4), 返回2 |
Rnd() |
返回一个随机数,其值是一个大于或等于0、小于1的小数。参数<0,每次返回相同的随机数;参数=0,返回最近产生的随机数;参数>0,依次产生下一个随机数。另外,调用Rnd()之前,应先调用Randomize,这样才能保证Rnd()生成的随机数没有规律可循。 |
Rnd(3) |
表4-6 数学运算函数
例4.5 生成一个10到20之间的随机数。
<%
Dim RndNumber
Randomize
RndNumber=Int((20-10+1)*Rnd(1)+10)
Response.Write RndNumber
%>
生成一个介于整数N~M之间的随机数可以通过如下表达式得到:
INT((M-N+1)*RND()+N)
2. 字符串处理函数
函数 |
功能说明 |
应用示例 |
Asc() |
返回指定字符串中第一个字符的ASCII码 |
Asc(″abc″) |
Chr() |
返回指定数值对应的ASCII字符 |
Chr(65) |
Len() |
检测字符串的长度 |
Len(″abc″) |
Lcase() |
将指定字符串中的小写字母转化为大写字母 |
Lcase(″aBc″)
返回″ABC″ |
UCase() |
将指定字符串中的大写字母转化为小写字母 |
Ucase(″aBc″)
返回″abc″ |
Instr() |
检测一个字符串在另一个字符串中出现的起始位置,检测顺序从左至右 |
Instr(″adabc″, ″ab″)
返回3 |
InstrRev() |
检测一个字符串在另一个字符串中出现的起始位置,检测顺序从右至左 |
Instrrev(″adabc″, ″d″)
返回4 |
Left() |
按指定长度从指定字符串左端截取字符串 |
Left(″abcde″,3)
返回″abc″ |
Right() |
按指定长度从指定字符串右端截取字符串 |
Right(″abcde″,3)
返回″cde″ |
Mid() |
按指定位置和长度从指定字符串中截取字符串 |
Mid(″abcde″,3,2)
返回″cd″ |
Ltrim() |
删除指定字符串的前导空格 |
Ltrim(″ abc″)
返回″abc″ |
Rtrim() |
删除指定字符串的拖尾空格 |
Rtrim(″abc ″
返回″abc″ |
Trim() |
删除指定字符串的前导和拖尾空格 |
Trim(″ abc ″)
返回″abc″ |
String() |
按指定次数重复指定字符串 |
String(3, ″a″)
返回″aaa″ |
Space() |
按指定长度产生由空格组成的字符串 |
Space(3) |
Replace() |
将字符串中指定的子串替换为另外的字串 |
Replace(″abc″, ″b″, ″a″)返回″aac″ |
StrReverse() |
将指定字符串按逆序排列 |
Steeeverse(″abc″)
返回″cba″ |
表4-7 字符串处理函数
3. 日期时间处理函数
函数 |
功能说明 |
应用示例 |
Now() |
返回当前日期和时间 |
Now() |
Day() |
返回指定日期的天数,从1到31 |
Day(Date()) |
Date() |
返回系统当前日期 |
Date() |
Month() |
检测指定日期的月数,从1到12 |
Month(Date()) |
MonthName() |
返回指定月份的名称 |
Monthname(Date()) |
Year() |
检测指定日期的年份 |
Year(Date()) |
WeekDay() |
返回指定日期的天数,从1到7。1表示星期日,其余类推。 |
Weekday(Date()) |
DateAdd() |
在指定日期上加上若干个单位,如:
DateAdd(″m″,1,#11/12/99#),返回12/12/99。第一个参数为“m”或“d”,指定增加月或日,第二个参数规定增加的单位。 |
DateAdd(″d″,5,#11/12/99#)
返回12/17/99 |
DateDiff() |
返回两个日期间的间隔数,间隔单位由第一个数规定,如:DateDiff(″m″,#1/1/99#,#5/2/99#),返回4,两个日期之间相差4个月。 |
DateDiff(″d″,#5/1/99#,#5/2/99#)
返回1。 |
Time() |
检测系统当前时间 |
Time() |
Hour() |
以24小时格式返回指定时间的小时数 |
Hour(Time()) |
Minute() |
返回指定时间的分钟数,从0到59 |
Minute(Time()) |
Second() |
返回指定时间的秒数,从0到59 |
Second(Time()) |
表4-8 日期时间函数
4. 数据类型转换函数
函数 |
功能说明 |
应用示例 |
Cbool() |
将数值表达式转换为布尔类型。表达式值为0,返回FALSE;否则返回TRUE。 |
Cbool(56),返回TRUE
|
Cdate() |
将表达式转换为日期类型。 |
Cdate(Jan 12,2001)
返回2001-1-12 |
CStr() |
将表达式转换为字符类型。 |
CStr(123.4)
返回″123.4″ |
表3-9数据类型转换函数
说明:使用类型转换函数时,给出的表达式必须是有效的,否则将返回错误信息。例如,Cdate()函数要求表达式是合法的日期子类型表达式,如Cdate(″abc″),VBScript将返回类型不匹配的错误信息。
5. 数据类型检测函数
数据检测类函数返回一个布尔值,往往用来构造一个逻辑判断条件。
函数 |
功能说明 |
IsArray() |
检测变量是否数组。是返回TRUE,否则FALSE |
IsNumeric() |
检测表达式是否能转换为数值表达式,是返回TRUE,否则FALSE。 |
IsDate() |
检测表达式是否能转换为日期,是返回TRUE,否则FALSE。 |
IsEmpty() |
检测变量是否已经初始化,是返回TRUE,否则FALSE。 |
IsNull() |
检测变量的值是否为NULL,是返回TRUE,否则FALSE。 |
IsObject() |
检测变量是否为ActiveX对象,是返回TRUE,否则FALSE。 |
TypeName() |
返回变量的子类型名称,其值是字符串。 |
VarType() |
返回变量的子类型代码,其值是数值。 |
表4-10 数据类型检测函数
6. 格式化函数
VBScript引入了格式化函数,用于对货币类型、时间类型和数字类型数据的输出格式进行处理,这些处理基于控制面板的“区域设置”中相关的定义。
函数 |
功能说明 |
应用示例 |
FormatCurrency() |
按控制面板中定义的货币符号,将数值格式化为货币值。 |
FormatCurrency(100)
¥100.00 |
FormatDateTime() |
格式化日期和时间。 |
FormatDateTime(Now,0)
返回2002-2-18 8:37:06
FormatDateTime(Now,1)
返回2002年2月18日 |
FormatNumber() |
格式化数值。 |
FormatNumber()详见 |
FormatPercent() |
将表达式格式化为以%结尾的百分比格式。 |
FormatPercent(78/100)
返回78% |
表4-11 格式化函数
4.3 程序流程控制语句
4.3.1 条件判断语句
1. 单分支语句
格式:IF 条件 THEN
语句序列
END IF
说明:
⑴ 当条件为TRUE时,执行THEN和END IF之间的语句序列,否则跳过语句序列直接执行END IF的后继语句。
⑵ 如果关键字THEN后面只有一条语句,并与THEN写在同一行,END IF可省略,例如:
<% IF X<5 THEN Y=6 %>
2. 双分支语句
格式:IF 条件 THEN
语句序列1
ELSE
语句序列2
END IF
说明:
⑴ 条件为TRUE时执行语句序列1,然后转向END IF的后继语句;条件为FALSE执行语句序列2后转向END IF的后继语句。
⑵ VBScript中允许在IF…THEN…ELSE结构中增加ELSEIF子句,用来实现分支的嵌套,从而对多个条件进行判断和分支选择,它的语法格式为:
IF 条件1 THEN
语句序列1
ELSEIF 条件2 THEN
语句序列2
……
ELSE
语句序列N
END IF
VBScript首先测试条件1,如果为FALSE,再测试条件2,依次类推,直到找到为TRUE的条件i;执行语句序列i之后转向END IF的后继语句。如果所有条件均为FALSE, 则执行ELSE后面的语句序列N。
例4.6 分支的嵌套应用示例。
<BODY>
<%
Dim Mnum
Mnum=Mounth(Date())
IF Mnum=3 OR Mnum=4 OR Mnum=5
Response.Write Mnum &″月是春季″
ELSEIF Mnum=6 OR Mnum=7 OR Mnum=8
Response.Write Mnum &″月是夏季″
ELSEIF Mnum=9 OR Mnum=10 OR Mnum=11
Response.Write Mnum &″月是秋季″
ELSE
Response.Write Mnum &″月是冬季″
END IF
%>
</BODY>
3. 多分支语句
格式:SELECT CASE 表达式
CASE 值1
语句序列1
CASE 值2
语句序列2
……
CASE ELSE
语句序列N+1
END SELECT
说明:SELECT CASE后面要求一个数值或字符型表达式,其后的CASE则分别列出了该表达式可能出现的值。SELECT CASE依次比较表达式和CASE的值,如果相等就执行对应的语句序列,然后转向END SELECT的后继语句;如果所有的值都不匹配,执行语句序列N+1。如果有多个CASE值与表达式匹配,仅执行与第一个匹配的CASE相关的语句序列。
例4.7 SELECT CASE应用示例。
<% @ Language=″VBScript″%>
<% Option Explicit %>
<HTML>
<HEAD><TITLE>显示当天日期</TITLE></HEAD>
<BODY>
今天是<% Response.WriteDate() %>
<%
Dim Day
Day=WeekDay(Date())
SELECT CASE Day
CASE ″1″
Response.Write ″星期日″
CASE ″2″
Response.Write ″星期一″
CASE ″3″
Response.Write ″星期二″
CASE ″4″
Response.Write ″星期三″
CASE ″5″
Response.Write ″星期四″
CASE ″6″
Response.Write ″星期五″
CASE ELSE
Response.Write ″星期六″
END SELECT
%>
</BODY>
</HTML>
将程序代码用文件名E4_7.asp保存在C:InetPubwwwrootasp下,在IE地址栏输入http://localhost/asp/E4_7.asp,执行结果如图4- 所示。
SELECT结构中每一个CASE允许有多个值,如4.6可改为如下代码:
<BODY>
<%
Dim Mnum
Mnum=Mounth(Date())
SELECT CASE Mnum
CASE 3,4,5
Response.Write Mnum &″月是春季″
CASE 6,7,8
Response.Write Mnum &″月是夏季″
CASE 9,10,11
Response.Write Mnum &″月是秋季″
CASE ELSE
Response.Write Mnum &″月是冬季″
END SELECT
%>
</BODY>
4.2.2 循环语句
1. DO WHILE … LOOP循环
格式1:DO WHILE 条件
语句序列
LOOP
格式2:DO
语句序列
LOOP WHILE 条件
说明:格式1和格式2都是当条件为TRUE或非零值时继续循环,条件为FALSE或零时终止循环。格式2是先执行语句序列,后判断条件,这就保证了语句序列至少被执行一次。
例4.8 DO WHILE … LOOP循环应用示例。
<%
I=5
DO WHILE I>=1
Response.Write ″<FONT size=″&I&″>″&″Hello″&″</FONT><BR>″
I=I-1
LOOP
%>
2. DO UNTIL … LOOP循环
格式1:DO UNTIL 条件
语句序列
LOOP
格式2:DO
语句序列
LOOP UNTIL 条件
说明:与DO WHILE … LOOP循环相反,格式1和格式2都是当条件为FALSE或零时继续循环,条件为TRUE或非零值时终止循环。格式2是先执行语句序列,后判断条件,这就保证了语句序列至少被执行一次。
这里特别要强调的是,在上述的两种循环中,都必须在语句序列中安排使循环趋于结束的语句,以避免构成死循环。
3. FOR…NEXT循环
格式:FOR 循环变量=初值 TO 终值 [STEP 步长]
语句序列
NEXT
说明:FOR…NEXT循环用于事先知道循环次数的场合。其中步长值是整数,默认值为1。每执行一次语句序列,循环变量就自动按步长规定的增量增加或减少。FOR…NEXT循环首先将初值赋予循环变量,当步长>0时,测试该变量是否大于终值,若是跳出循环;当步长<0时,测试该变量是否小于终值,若是跳出循环。
例4.9 FOR …NEXT循环应用示例。
<% @ Language=″VBScript″%>
<% Option Explicit %>
<HTML>
<HEAD><TITLE>FOR …NEXT循环</TITLE></HEAD>
<BODY>
<%
Dim User(2)
User(0)= ″刘柳″
User(1)= ″20020662001″
User(2)= ″应用化学″
FOR I=0 TO 2
Response.Write User(I)& ″<BR>″
NEXT
%>
</BODY>
</HTML>
将程序代码用文件名E4_9.asp保存在C:InetPubwwwrootasp,在IE地址栏输入http://localhost/asp/E4_9.asp,执行结果如图4- 所示。
4. FOR EACH…NEXT循环
格式:FOR EACH 循环变量 IN 数组名
语句序列
NEXT
说明:FOR EACH…NEXT循环专门用于数组或对象的集合。它与FOR…NEXT循环的区别是无须知道数组或集合的元素个数,由该循环控制结构自行检测并枚举所有元素。
例4.10 用FOR EACH…NEXT循环实现上例。
本例只需将上例中FOR…NEXT循环改为FOR EACH…NEXT循环,其余部分相同。
<%
FOR EACH I IN User
Response.Write User(I)& ″<BR>″
NEXT
%>
5. WHILE…WEND循环
格式:WHILE 条件
语句序列
WEND
说明: 当条件为TRUE时,执行语句序列;直至条件为FALSE或NULL时跳出循环。和DO…LOOP循环一样,在语句序列中应含有使循环趋于结束的语句,以避免陷入死循环。
6. EXIT语句
EXIT语句用来终止当前正在执行的循环或过程,该语句通常置于条件判断语句中,在条件为“真”时跳出循环或过程。
EXIT语句有4种形式:
EXIT DO——强制终止DO… LOOP循环。
EXIT FOR——强制终止FOR循环。
EXIT SUB——退出当前过程。
EXIT FUNCTION——退出当前函数。
例4.11 将例4.8改为用EXIT DO终止循环。
<%
I=5
DO WHILE TRUE
Response.Write ″<FONT size=″&I&″>″
Response.Write ″Hello″&″</FONT><BR>″
I=I-1
IF I<1 THEN EXIT DO
LOOP
%>
4.4 过程与自定义函数
4.4.1 过程
过程是完成特定功能的独立的程序代码。VBScript中既可以将过程置于调用该过程的同一.asp文件中,也可以将常用过程放在单独的.asp文件中,使用#include命令将该文件包含在调用这些过程的.asp文件中。
1.过程的定义和调用
过程定义的一般形式:
SUB 过程名[(形参1,形参2…)]
语句序列
END SUB
调用过程的一般形式:
[CALL] 过程名[(实参1,实参2…)]
说明:
⑴ 过程命名规则与变量命名规则相同。
⑵ EXIT SUB语句用于退出当前过程。
2.过程调用中参数的传递
带参数过程调用中参数的传递方式有两种:值传递方式和按地址传递方式。值传递方式是“单向传递”,在过程中对形参的修改不会改变与之对应的实参的值。地址传递方式是所谓“双向传递”,在过程中对形参的修改会引起实参值的改变。在一个参数前用BYVAL进行说明,则该变量按值方式传递数据;在一个参数前用BYREF进行说明,该变量按地址方式传递数据。默认按值方式传递数据。
例4.12 过程调用中参数的传递方式。
<%
SUB P1(ByVal X,Y) ′X按值方式传值,Y按默认方式传值
X=X+5
Y=Y+5
END SUB
SUB P2(ByRef Z) ′Z按地址方式传值
X=X+5
END SUB
Dim A,B,C
A=1
B=2
C=3
P1(A,B) ′调用过程P1
P2(C) ′调用过程P2
RESPONSE.WRITE ″按值方式传值,实参A的值是″& A &″<BR>″
RESPONSE.WRITE ″按默认方式传值,实参B的值是″& B &″<BR>″
RESPONSE.WRITE ″按地址方式传值,实参C的值是″& C
%>
图4-是执行结果。
4.4.2 自定义函数
自定义函数与过程一样,也是用来完成特定功能的独立的程序代码,它与过程的主要区别就是调用函数将获得一个返回值。
自定义函数的一般形式:
FUNCTION 函数名 [(形参1,形参2…)]
语句序列
函数名=返回值
END FUNCTION
调用自定义函数的一般形式:
变量名=函数名[(实参1,实参2…)]
说明:
⑴ 函数命名规则与变量命名规则相同。
⑵ 函数参数的传递方式默认为值传递。
⑶ EXIT FUNCTION语句用于退出当前函数。但是本语句执行前必须为函数赋值,这就是说本语句只能出现在“函数名=返回值”之后。
例4.13 函数应用示例。
<%
Dim X,Y
X=5
Y=10
Response.Write ″输出一个介于″&X″~″&Y&″之间的随机数″&RanNum(X,Y)
Function RanNum(N,M)
Randomize
RanNum=Int(M-N+1)*Rnd()+N)
End Function
%>
4.4.3 变量的作用域
变量的作用域就是变量的有效范围,根据作用域可将变量分为两类:局部量和全局量。
在过程中定义的变量称为局部变量或过程级变量,局部量在定义该变量的过程及其子过程中有效;在过程外定义的变量称为全局变量或脚本级变量,全局量在同一个脚本里所有的过程中均有效。变量的作用域和定义变量的位置有关。一般而言,局部量在过程、函数或事件中定义;全局量在任何过程之外定义。
VBScript要求在同一作用域内,不出现同名变量。同名变量如果具有不同的作用域,VBScript将他们视为不同的变量,修改一个变量的值不会影响另一个的值。
例4.14 同名全局变量和局部变量的作用域。
<%
Option Explicit
Dim X ′定义全局量X
X=10
Response.Write X ′将调用P1前X的值发送到客户端浏览器
Call P1
Response.Write X ′将调用P1后X的值发送到客户端浏览器
Sub P1
Dim X ′定义局部量X
X=15
End Sub
%>
上述程序的运行结果如图4-,可见在调用P1前后全局变量X的值均为10,并没有因为调用P1被其中的同名局部变量X的值替代。
全局变量的作用范围限于定义该变量的.asp文件。但是在实际应用中,往往需要在不同的.asp文件之间共享某些数据,这就需要借助于Application对象和Session对象。这部分内容参见4.4。
|