无忧站长 >

用ASP连接数据库的几种方法

2019-11-01 14:45:28 
用ASP连接DBF、DBC、MDB、Excel、SQL Server型数据库的方法:
一、ASP的对象存取数据库方法
在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:Connection、Recordset 、Command
Connection:负责打开或连接数据
Recordset:负责存取数据表
Command:负责对数据库执行行动查询命令
二、连接各数据库的驱动程序
连接各数据库可以使用驱动程序,也可以使用数据源,不过我建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。
驱动程序 适用数据库类型
Microsoft.Jet.OLEDB.4.0 Mdb
Microsoft Access Driver Access
Microsoft dBase Driver Dbase
Microsoft Excel Driver Excel
Microsoft Visual FoxPro Driver Dbc
SQLOLEDB.1 SQL srver7.0
而我们在一般情况下使用Access的数据库比较多,在这里我建议大家连接Access数据库使用下面的方法:
dim conn
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open = \\\\\\\"provider=microsoft.jet.oledb.4.0;\\\\\\\" & \\\\\\\"data source = \\\\\\\" &
server.mappath(\\\\\\\"../db/bbs.mdb\\\\\\\")
其中../db/bbs.mdb是你的数据库存放的相对路径!如果你的数据库和ASP文件在同一目录下,你只要这样写就可以了:
dim conn
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open = \\\\\\\"provider=microsoft.jet.oledb.4.0;\\\\\\\" & \\\\\\\"data source = \\\\\\\" & server.mappath(\\\\\\\"bbs.mdb\\\\\\\")
有许多初学者在遇到数据库连接时总是会出问题,然而使用上面的驱动程序只要你的数据库路径选对了就不会出问题了
ASP连接数据库的5种方法
第一种 - 这种方法用在ACCESS中最多
strconn = \\\\\\\"DRIVER=Microsoft Access Driver (*.mdb);DBQ=\\\\\\\" _
& Server.MapPath(\\\\\\\"aspfree.mdb\\\\\\\")
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open strconn
第二种-这种方法用在SQL SERVER中多
strconn = \\\\\\\"Driver={SQL Server};Description=sqldemo;SERVER=127.0.0.1;\\\\\\\" _
&\\\\\\\"UID=LoginID;Password=;DATABASE=Database_Name\\\\\\\"
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open strconn
第三种
strconn=\\\\\\\"Driver={Microsoft Access Driver(*.mdb)};\\\\\\\" _
&\\\\\\\"DBQ=F:\\\\\\\\Inetpub\\\\\\\\wwwroot\\\\\\\\somedir\\\\\\\\db1.mdb;DefaultDir=\\\\\\\" _
&\\\\\\\"f:\\\\\\\\Inetpub\\\\\\\\wwwroot\\\\\\\\somedir;uid=LoginID;\\\\\\\" _
&\\\\\\\"pwd=Password;DriverId=25;FIL=MSAccess;\\\\\\\"
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open strconn
第四种运用系统数据源
The following uses a Data Source Name: Example
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open \\\\\\\"Example\\\\\\\"
第五种运用ODBC数据源,前提是你必须在控制面板的ODBC中设置数据源
set rs = server.createobject(\\\\\\\"adodb.recordset\\\\\\\")
rs.open \\\\\\\"tblname\\\\\\\", \\\\\\\"DSNName\\\\\\\", 3, 3 第一种 - 这种方法用在ACCESS中最多
strconn = \\\\\\\"DRIVER=Microsoft Access Driver (*.mdb);DBQ=\\\\\\\" _
& Server.MapPath(\\\\\\\"aspfree.mdb\\\\\\\")
set conn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open strconn
ASP如何使用MYSQL数据库
mysql数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选
数据库,但一般都是用php+mysql相结合来开发各种动态页面,其实asp也可以
使用mysql数据库开发动态页面,小弟我也是刚刚学会,不敢独享,所以特写了
这篇文章供大伙参考。
我的环境是windows2000+iis5.0+mysql-3.23.32-win+php4
mysql-3.23.32-win(这个是最新版的)
myodbc-2.50.36-dll(这个是最重要的,mysql odbc的驱动程序,可以在www.mysql.com下载)
第一步:安装mysql odbd的驱动程序,将下载的myodbd-2.50.46-dll文件复制到windows\\\\\\\\system目录下(windows2000是winnt/system32)
然后建立一新文件,扩展名为reg(就是注册表文件),将以下内容复制到该文件中。
regedit4
[hkey_local_machine\\\\\\\\software\\\\\\\\odbc\\\\\\\\odbcinst.ini\\\\\\\\myodbc driver]
\\\\\\\"usagecount\\\\\\\"=dword:00000002
\\\\\\\"driver\\\\\\\"=\\\\\\\"c:\\\\\\\\windows\\\\\\\\system\\\\\\\\myodbc.dll\\\\\\\"
\\\\\\\"setup\\\\\\\"=\\\\\\\"c:\\\\\\\\windows\\\\\\\\system\\\\\\\\myodbc.dll\\\\\\\"
\\\\\\\"sqllevel\\\\\\\"=\\\\\\\"1\\\\\\\"
\\\\\\\"fileusage\\\\\\\"=\\\\\\\"0\\\\\\\"
\\\\\\\"driverodbcver\\\\\\\"=\\\\\\\"02.50\\\\\\\"
\\\\\\\"connectfunctions\\\\\\\"=\\\\\\\"yyy\\\\\\\"
\\\\\\\"apilevel\\\\\\\"=\\\\\\\"1\\\\\\\"
\\\\\\\"cptimeout\\\\\\\"=\\\\\\\"120\\\\\\\"
[hkey_local_machine\\\\\\\\software\\\\\\\\odbc\\\\\\\\odbcinst.ini\\\\\\\\odbc drivers]
\\\\\\\"myodbc driver\\\\\\\"=\\\\\\\"installed\\\\\\\"
保存后双击该文件,将上面代码注册到windows注册表中。
如果安装在windows2000中,则driver和setup主键的值要做相应改变,这里我想就不用多说了。
如果成功,在控制面板/odbd数据源的驱动程序里将看到myodbd driver这一项!
第二步:建立asp文件链接数据库。
这里有两种方法,一种是在odbc数据源中建立一个系统dsn。后来我发现不建立也可以在asp中使用mysql,方法在下文将讲道。
打开控制面板/odbd数据源,选择系统dsn,然后添加一个新的dsn,驱动程序选择myodbd driver,会出现一个对话框供输入mysql
相关信息。
windows dsn name: 所要建立dsn的名称
mysql host (name or ip):mysql服务器的名称或者是ip地址,通常填localhost
mysql database name:需要使用数据库的名称,数据库在mysql管理程序中建立。这里我们使用一个例子。数据库名:hc188
里面有数据表:user 数据表有两个字段分别是:username和password,随便插入几个数据。
user:链接数据库的用户名,我填的是root超级用户
password:链接数据库用户密码,如果没有,可以不填
port(if not 3306):mysql在服务器的端口,如果不填默认为3306
sql command on connect:使用sql命令链接数据库,这项可以不填
填写完毕后选择ok保存。
下面链接数据库的asp代码!
<%
strconnection = \\\\\\\"dsn=hc188;driver={myodbd driver};server=localhost;uid=root;pwd=;database=hc188\\\\\\\"
set adodataconn = server.createobject(\\\\\\\"adodb.connection\\\\\\\")
adodataconn.open strconnection
strquery = \\\\\\\"select * from user\\\\\\\"
set rs = adodataconn.execute(strquery)
if not rs.bof then
%>
<table>
<tr>
<td<b>username</b></td>
<td><b>password</b></td>
</tr>
<%
do while not rs.eof
%>
<tr>
<td><%=rs(\\\\\\\"username\\\\\\\")%></td>
<td><%=rs(\\\\\\\"password\\\\\\\")%></td>
</tr>
<%
rs.movenext
loop
%>
</table>
<%
else
response.write(\\\\\\\"sorry, no data found.\\\\\\\")
end if
rs.close
adodataconn.close
set adodataconn = nothing
set rsemaildata = nothing
%>
第二种方法:我在使用中想过如果不建立系统dsn,是否也可以使用mysql数据库呢?结果是可以的。
方法很简单,把上面asp代码第二行代码改为:
strconnection=\\\\\\\"defaultdir=;driver={myodbc driver};database=hc188\\\\\\\"
我奇怪的发现,这种方法连用户名和密码都不需要就可以使用。是不是mysql的一个bug呢?
以上代码全部经测试通过!
ASP 编程中 20 个非常有用的例子
1.如何用Asp判断你的网站的虚拟物理路径
答:使用Mappath方法
< p align=\\\\\\\"center\\\\\\\" >< font size=\\\\\\\"4\\\\\\\" face=\\\\\\\"Arial\\\\\\\" >< b >
The Physical path to this virtual website is:
< /b >< /font >
< font color=\\\\\\\"#FF0000\\\\\\\" size=\\\\\\\"6\\\\\\\" face=\\\\\\\"Arial\\\\\\\" >
< %= Server.MapPath(\\\\\\\"\\\\\\\\\\\\\\\")% >
< /font >< /p >
2.我如何知道使用者所用的浏览器?
答:使用the Request object方法
strBrowser=Request.ServerVariables(\\\\\\\"HTTP_USER_AGENT\\\\\\\")
If Instr(strBrowser,\\\\\\\"MSIE\\\\\\\") < > 0 Then
Response.redirect(\\\\\\\"ForMSIEOnly.htm\\\\\\\")
Else
Response.redirect(\\\\\\\"ForAll.htm\\\\\\\")
End If
3.如何计算每天的平均反复访问人数
答:解决方法
< % startdate=DateDiff(\\\\\\\"d\\\\\\\",Now,\\\\\\\"01/01/1990\\\\\\\")
if strdate< 0 then startdate=startdate*-1
avgvpd=Int((usercnt)/startdate) % >
显示结果
< % response.write(avgvpd) % >
that is it.this page have been viewed since November 10,1998
4.如何显示随机图象
< % dim p,ppic,dpic
ppic=12
randomize
p=Int((ppic*rnd)+1)
dpic=\\\\\\\"graphix/randompics/\\\\\\\"&p&\\\\\\\".gif\\\\\\\"
% >
显示
< img src=\\\\\\\"< %=dpic% >\\\\\\\" >
5.如何回到先前的页面
答:< a href=\\\\\\\"< %=request.serverVariables(\\\\\\\"Http_REFERER\\\\\\\")% >\\\\\\\" >preivous page< /a >
或用图片如:< img src=\\\\\\\"arrowback.gif\\\\\\\" alt=\\\\\\\"< %=request.serverVariables(\\\\\\\"HTTP_REFERER\\\\\\\")% >\\\\\\\" >
6.如何确定对方的IP地址
答:< %=Request.serverVariables(\\\\\\\"REMOTE_ADDR)% >
7.如何链结到一副图片上
答:< % @Languages=vbscript % >
< % response.expires=0
strimagename=\\\\\\\"graphix/errors/erroriamge.gif\\\\\\\"
response.redirect(strimagename)
% >
8.强迫输入密码对话框
答:把这句话放载页面的开头
< % response.status=\\\\\\\"401 not Authorized\\\\\\\"
response.end
% >
9.如何传递变量从一页到另一页
答:用 HIDDEN 类型来传递变量
< % form method=\\\\\\\"post\\\\\\\" action=\\\\\\\"mynextpage.asp\\\\\\\" >
< % for each item in request.form % >
< input namee=\\\\\\\"< %=item% >\\\\\\\" type=\\\\\\\"HIDDEN\\\\\\\"
value=\\\\\\\"< %=server.HTMLEncode(Request.form(item)) % >\\\\\\\" >
< % next % >
< /form >
10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows:
< % yourVar=\\\\\\\"测试对话框\\\\\\\"% >
< % script language=’javascript’ >
alert(\\\\\\\"< %=yourvar% >\\\\\\\")
< /script >
11.有没有办法保护自己的源代码,不给人看到
答:可以去下载一个微软的Windows Script Encoder,它可以对asp的脚本和客户端javascript/vbscript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有script engine 5(装一个ie5就有了)才能执行。
12.怎样才能将 query string 从一个 asp 文件传送到另一个?
答:前者文件加入下句: Response.Redirect(\\\\\\\"second.asp?\\\\\\\" & Request.ServerVariables(\\\\\\\"QUERY_STRING\\\\\\\"))
13.global.asa文件总是不起作用?
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码?
答:Internet Sevices Manager - > 选择default web site - >右鼠键- >菜单属性-〉主目录- > 应用程序设置(Application Setting)- > 点击按钮 \\\\\\\"配置\\\\\\\"- > app mapping - >点击按钮\\\\\\\"Add\\\\\\\" - > executable browse选择 \\\\\\\\WINNT\\\\\\\\SYSTEM32\\\\\\\\INETSRV\\\\\\\\ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理,效率将降低。
15.如何注册组件
答:有两种方法。
第一种方法:手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行,进入到包含有DLL的目录,并输入:regsvr32 component_name.dll 例如 c:\\\\\\\\temp\\\\\\\\regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了,但是这个方法有一个缺陷。当使用这种方法注册完毕组件后,该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表,所以,这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下,要取消注册这个dll,使用:regsvr32 /u aspobject.dll example c:\\\\\\\\temp\\\\\\\\regsvr32 /u aneiodbc.dll
第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下:
1) 打开IIS管理控制台。
2) 展开transaction server,右键单击\\\\\\\"pkgs installed\\\\\\\"然后选择\\\\\\\"new package\\\\\\\"。
3) 单击\\\\\\\"create an empty package\\\\\\\"。
4) 给该包命名。
5) 指定administrator帐号或则使用\\\\\\\"interactive\\\\\\\"(如果服务器经常是使用administrator 登陆的话)。
6) 现在使用右键单击你刚建立的那个包下面展开后的\\\\\\\"components\\\\\\\"。选择 \\\\\\\"new then component\\\\\\\"。
7) 选择 \\\\\\\"install new component\\\\\\\" [b]。
8) 找到你的.dll文件然后选择next到完成。
要删除这个对象,只要选择它的图标,然后选择delete。
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。
16. ASP与Access数据库连接:
<%@ language=VBscript%>
<%
dim conn,mdbfile
mdbfile=server.mappath(\\\\\\\"数据库名称.mdb\\\\\\\")
set conn=server.createobject(\\\\\\\"adodb.connection\\\\\\\")
conn.open \\\\\\\"driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq=\\\\\\\"&mdbfile
%>
17. ASP与SQL数据库连接:
<%@ language=VBscript%>
<%
dim conn
set conn=server.createobject(\\\\\\\"ADODB.connection\\\\\\\")
con.open \\\\\\\"PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
%>
建立记录集对象:
set rs=server.createobject(\\\\\\\"adodb.recordset\\\\\\\")
rs.open SQL语句,conn,3,2
18. SQL常用命令使用方法:
(1) 数据记录筛选:
sql=\\\\\\\"select * from 数据表 where 字段名=字段值 order by 字段名 [desc]\\\\\\\"
sql=\\\\\\\"select * from 数据表 where 字段名 like ’%字段值%’ order by 字段名 [desc]\\\\\\\"
sql=\\\\\\\"select top 10 * from 数据表 where 字段名 order by 字段名 [desc]\\\\\\\"
sql=\\\\\\\"select * from 数据表 where 字段名 in (’值1’,’值2’,’值3’)\\\\\\\"
sql=\\\\\\\"select * from 数据表 where 字段名 between 值1 and 值2\\\\\\\"
(2) 更新数据记录:
sql=\\\\\\\"update 数据表 set 字段名=字段值 where 条件表达式\\\\\\\"
sql=\\\\\\\"update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式\\\\\\\"
(3) 删除数据记录:
sql=\\\\\\\"delete from 数据表 where 条件表达式\\\\\\\"
sql=\\\\\\\"delete from 数据表\\\\\\\" (将数据表所有记录删除)
(4) 添加数据记录:
sql=\\\\\\\"insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)\\\\\\\"
sql=\\\\\\\"insert into 目标数据表 select * from 源数据表\\\\\\\" (把源数据表的记录添加到目标数据表)
(5) 数据记录统计函数:
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql=\\\\\\\"select sum(字段名) as 别名 from 数据表 where 条件表达式\\\\\\\"
set rs=conn.excute(sql)
用 rs(\\\\\\\"别名\\\\\\\") 获取统的计值,其它函数运用同上。
(5) 数据表的建立和删除:
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now())
DROP TABLE 数据表名称 (永久性删除一个数据表)
19. 记录集对象的方法:
rs.movenext 将记录指针从当前的位置向下移一行
rs.moveprevious 将记录指针从当前的位置向上移一行
rs.movefirst 将记录指针移到数据表第一行
rs.movelast 将记录指针移到数据表最后一行
rs.absoluteposition=N 将记录指针移到数据表第N行
rs.absolutepage=N 将记录指针移到第N页的第一行
rs.pagesize=N 设置每页为N条记录
rs.pagecount 根据 pagesize 的设置返回总页数
rs.recordcount 返回记录总数
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否
rs.delete 删除当前记录,但记录指针不会向下移动
rs.addnew 添加记录到数据表末端
rs.update 更新数据表记录
---------------------------------------
20 Recordset对象方法
Open方法
recordset.Open Source,ActiveConnection,CursorType,LockType,Options
Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。
ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。
CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
--------------------------------------------------------------
常数 常数值 说明
-------------------------------------------------------------
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。
adOpenKeyset 1 启动一个Keyset类型的游标。
adOpenDynamic 2 启动一个Dynamic类型的游标。
adOpenStatic 3 启动一个Static类型的游标。
-------------------------------------------------------------
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。
-------------------------------------------------------------
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
-------------------------------------------------------------
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType 可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords 可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery 支持 支持 支持 支持
Resync 不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch 支持 支持 支持 支持
--------------------------------------------------------------
其中NextRecordset方法并不适用于Microsoft Access数据库。
LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
-------------------------------------------------------------
常数 常数值 说明
--------------------------------------------------------------
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、
删、改的操作。
计算页面执行时间
页面执行时间:就是从这页的开始执行一直到这页执行完毕所用的时间。
许多网站的首页的页尾都会显示一个页面执行时间,下面说说如何实现:
首先在一个网页的开头定义一个变量:
dim startime
startime=time()
在显示页面执行时间的地方,这个地方应该是页尾的地方:
dim endtime
endtime=timer()
页面执行时间:<%=FormatNumber((endtime-startime)*1000,3)%>毫秒
大家试试吧 !
SQL语句简介-给初学者
SQL语言的运用是相当广泛的,当今的主流关联数据库都用了这种语言,它的特点是:移植性好,可在多种语言中引用;简单易学。这里我们只浅显的介绍它在ASP中的运用。
运用数据库管理是ASP的最引以自豪的功能正是由于它在运行数据库上的强大的优势,才使得的人们相信CGI是可以代替的,当然要在数据库上做文章,不知道SQL是不可能的,在ASP中无论何时访问一个数据库,都要用SQL语句,因此掌握好SQL对ASP编程是非常重要的.在ASP中我们最最常用的是SQL的数据查询语言和数据操作语言
那就先介绍数据查询吧
1.一般的数据查询的格式如下:(对单个表的查询操作)
select 字段 from 表 where 查询条件
举例说明:我从student表中取出name字段为\\\\\\\"成龙\\\\\\\"的学生,显示的时候只显示name字段,可以用如下语句:
select name from student where name=’成龙’
2.操作多个表就显得稍微麻烦了,声名:操作多个表的时候一定要写出各个表的关联的字段,否则,取出多个表的记录的时候,将以排列组合的方式显示的,这样的查询在大多数的情况下是没有任何意义的,除非你刻意去这样做.
举例:数据库pubs中有三个表titleauthor,titles 和authors,titleauthor是用来将titles和authors表关联在一起的,可以写如下的查询语句:
select au_name,title from author
where authors.au_id=titles_id and
titles.title_id=titleauthor.title_id
如果还有别的约束条件可以继续添加and或者or语句,如果查询操作的表是2个,而事先知道2个表中的字段是\\\\\\\"多对多\\\\\\\"的关系,就得用第3个表来关联了,如果2个表只存在\\\\\\\"一对一\\\\\\\"或者\\\\\\\"一对多\\\\\\\"的关系,可以利用公共字段对他们进行关联!
其实操作语言也不难,包括insert,update,delete分别对表中的数据进行添加,修改和删除
1.插入数据语法如下:
insert into mytable(mycolumn) values(’somevalue’)
举例说明一个student表有中的两个字段name和sex要插入数据记录为\\\\\\\"成龙\\\\\\\"\\\\\\\"男性\\\\\\\"
insert into student(name,sex) values(’成龙’,’男性’)
2.删除记录的语法如下:
delete from mytable where some_lolunm=’somevalue’
举例说明:将student表中name字段为\\\\\\\"成龙\\\\\\\"的记录删除
delete from student where name=’成龙’
3.更新记录语法如下:
update mytable set first_colum=’some_value’
where second_cloum=’someother_value’
举例说明:将student 表中name字段为\\\\\\\"成龙\\\\\\\"的记录中的sex字段中的\\\\\\\"男性\\\\\\\"改为\\\\\\\"男\\\\\\\"(前提条件:没有把这个记录删除!)
update student set sex=’男’
where name=’成龙’
总结:SQL是一门非常强大的面向集合的数据库语言,想将它灵活运用并不是一件容易的事,需要你在以后的日子里不断的摸索推敲,当然,运用在ASP中的SQL语句都是相对简单的.
另外,还有关于SQL的5种集合函数,在这里就不介绍了,有兴趣者可以去看一点关于这方面的书,我想对于你学习ASP肯定是有帮助的
如何统计在线人数
在浏览网页的时侯,常常可以看见一些“当前网站上的人数是XXX人”的在线人数同计。如何用ASP来做一个呢?首先,分析一下它的做法,一般来说,这些线上人数统计都是指一个时段内的访客人数统计。比如(5分钟内,10分钟内)而这个时间的长短,是由设计者设定的。
在这个时段内同计各个不同IP的访客总数,就可以得出当前的线上人数了,但这里有一个精确问题需要解决,至于用什么办法来精确地统计,那就是各人不同的做法了,比如可以用自动提交的页面,隔一段时间读取COOKIES等等,而在ASP中,有一个更好的技巧,就是使用session对象来统计,这里介绍一下gobal.asa这个文件,这是一个很重要的一个文件,请看看它的结构。
<SCRIPT LANGUAGE=\\\\\\\"VBScript\\\\\\\" RUNAT=\\\\\\\"Server\\\\\\\">
Sub Session_OnStart
End Sub
Sub Session_OnEnd
End Sub
sub Application_OnStard
End Sub
sub Application_OnEnd
End Sub</SCRIPT>
当有一个会话发生时(用户浏览网页,向Web服务器发出请求)那么,如果自服务器启动后第一个用户的话,就会同时发生Application_OnStard和Session_OnStart这两个事件,之后,再有别的用户发出请求的话,就只发生Session_OnStart这个事件,而session的生存期是多长,是可以设定的,Session.timeout=X(分钟)
好了,有了这个很好用的方法,我们就能准确地统计出在线人数了,而人数总计是用一个application变量来保存,当在第一个会话开始时,在Application_OnStard事件中放置一条清空计数器的语句application(\\\\\\\"online\\\\\\\")=0,然后,在Session_OnStart事件中,放置一条增加在线人数的语句application(\\\\\\\"online\\\\\\\")=application(\\\\\\\"online\\\\\\\")+1,而在Session_OnEnd事件相应地放一条减少在线人数的语句,令计数值减一。
这样,这个文件就改为如下
<SCRIPT LANGUAGE=\\\\\\\"VBScript\\\\\\\" RUNAT=\\\\\\\"Server\\\\\\\">
Sub Session_OnStart
application(\\\\\\\"online\\\\\\\")=application(\\\\\\\"online\\\\\\\")+1
End Sub
Sub Session_OnEnd
application(\\\\\\\"online\\\\\\\")=application(\\\\\\\"online\\\\\\\")-1
End Sub
sub Application_OnStard
application(\\\\\\\"online\\\\\\\")=0
End Sub
sub Application_OnEnd
application(\\\\\\\"online\\\\\\\")=0
End Sub</SCRIPT>
接下来编一个显示图形数字的程序,把在线人数显示在指定的页面上。这样就能得出在人数了
*online.asp
<% @language=\\\\\\\"vbscript\\\\\\\" %>
<%
tmp=application(\\\\\\\"online\\\\\\\")
tmp=Cstr(tmp)
dim disp(20)
dim images(20)
dbbits=len(tmp)
for I= 1 to dbbits
disp(I)=left(right(tmp,I),I-(I-1))
next
for I=dbbits to 1 step -1
images(I)=\\\\\\\"<img src=\\\\\\\"&\\\\\\\"next
%>
上面的程序很简单,这里不作分析了,请大家自己阅读一下。在调用在线统计的页面上用一句script语句引用online.asp文件,以显示图形统计器。
<script language=\\\\\\\"javascript\\\\\\\" src=\\\\\\\"http://xxxx.com.cn/online.asp\\\\\\\"></script>
现在可以了,记住要点,你必须把gobal.asa放在正确的web应用程序根目录上,而最好单独为这个统计新建一个web应用程序,不要与其它别的程序混乱了,不然得出的数据是不准确的,而把这个程序修改为多用户的在线统计也很简单。这样就可以提供在线统计服务了,如何实现请又大家去思考一下吧....
如何实现用ASP发送邮件
这个功能要装上WINDOWS NT OPTON PACK 的SMTP SERVICE。
首先
Set mail = Server.CreateObject(\\\\\\\"CDONTS.NewMail\\\\\\\")以呼叫SMTP Service的元件,然后设定:
mail.To = \\\\\\\"收件者E-Mail地址\\\\\\\"
mail.From = \\\\\\\"寄件者的E-Mail地址\\\\\\\"
mail.Subject = \\\\\\\"主旨\\\\\\\"
mail.Body = \\\\\\\"E-mail内文\\\\\\\"
最后Mail.Send即开始发送邮件。
例如:
<%
Set mail = Server.CreateObject(\\\\\\\"CDONTS.NewMail\\\\\\\")
mail.TO = \\\\\\\"abc@xxx.com\\\\\\\"
mail.From = \\\\\\\"yourmail@xxx.com\\\\\\\"
mail.Subject = \\\\\\\"主题\\\\\\\"
mail.Body = \\\\\\\"E-Mail内容\\\\\\\"
mail.Send
%>
动态网站设计十八般武艺 ASP 篇(一)
作者:天骄创作室 书生
MicrosoftActiveServerPages即我们所称的ASP,其实是一套微软开发的服务器端脚本环境,ASP内含于IIS3.0和4.0之中,通过ASP我们可以结合HTML网页、ASP指令和ActiveX元件建立动态、交互且高效的WEB服务器应用程序。有了ASP你就不必担心客户的浏览器是否能运行你所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通HTML中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。以下罗列了ActiveServerPages所独具的一些特点:
使用VBScript、JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。
无须compile编译,容易编写,可在服务器端直接执行。
使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。
与浏览器无关(BrowserIndependence),用户端只要使用可执行HTML码的浏览器,即可浏览ActiveServerPages所设计的网页内容。ActiveServerPages所使用的脚本语言(VBScript、Jscript)均在WEB服务器端执行,用户端的浏览器不需要能够执行这些脚本语言。
ActiveServerPages能与任何ActiveXscripting语言相容。除了可使用VBScript或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其他脚本语言,譬如REXX、Perl、Tcl等。脚本引擎是处理脚本程序的COM(ComponentObjectModel)物件。
ActiveServerPages的源程序,不会被传到客户浏览器,因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。
可使用服务器端的脚本来产生客户端的脚本。
物件导向(Object-oriented)。
ActiveXServerComponents(ActiveX服务器元件)具有无限可扩充性。可以使用VisualBasic、Java、VisualC++、COBOL等编程语言来编写你所需要的ActiveXServerComponent。
ASP的奇妙之处真是不胜枚举,下面就请各位系好安全带,我将带领大家进入ASP的梦幻世界。
首先,让我们来看看运行ASP所需的环境:
Microsoft Internet Information Server version3.0/4.0 on Windows NT Server
Microsoft Peer Web Services Version3.0 on Windows NT Workstation
Microsoft Personal Web Server on Windows95/98
正如前文所述,与一般的程序不同,.asp程序无须编译,ASP程序的控制部份,是使用VBScript、JScript等脚本语言来设计的,当执行ASP程序时,脚本程序将一整套命令发送给脚本解释器(即脚本引擎),由脚本解释器进行翻译并将其转换成服务器所能执行的命令。当然,同其他编程语言一样,ASP程序的编写也遵循一定的规则,如果你想使用你所喜爱的脚本语言编写ASP程序,那么你的服务器上必须要有能解释这种脚本语言的脚本解释器。当你安装ASP时,系统提供了两种脚本语言:VBsrcipt和JScript,而VBscript则被作为系统默认的脚本语言。你也可以根据自己的喜好改变系统默认的脚本语言。
ASP本身并不是一种脚本语言,它只是提供了一种使镶嵌在HTML页面中的脚本程序得以运行的环境。但是,要学好ASP又必须掌握它的语法和规则。现在就让我们开始一步一步地认识并学习ActiveServerPages。
ASP程序其实是以扩展名为.asp的纯文本形式存在于WEB服务器上的,你可以用任何文本编辑器打开它,ASP程序中可以包含纯文本、HTML标记以及脚本命令。你只需将.asp程序放在WEB服务器的虚拟目录下(该目录必须要有可执行权限),就可以通过WWW的方式访问ASP程序了。要学好ASP程序的设计,必须掌握脚本的编写,那么究竟什么是脚本呢?其实脚本是由一系列的脚本命令所组成的,如同一般的程序,脚本可以将一个值赋给一个变量,可以命令WEB服务器发送一个值到客户浏览器,还可以将一系列命令定义成一个过程。要编写脚本,你必须要熟悉至少一门脚本语言,如VBScript。脚本语言是一种介乎于HTML和诸如JAVA、VisualBasic、C++等编程语言之间的一种特殊的语言,尽管它更接近后者,但它却不具有编程语言复杂、严谨的语法和规则。如前所述ASP所提供的脚本运行环境可支持多种脚本语言,譬如:JScript、REXX、PERL等等,这无疑给ASP程序设计者提供了广泛的发挥余地。ASP的出现使得广大WEB设计者不必在为客户浏览器是否支持而担心,实际上就算你在同一个.asp文件中使用不同的脚本语言,你都无须为此担忧,因为所有的一切都将在服务器端进行,客户浏览器得到的只是一个程序执行的结果,而你也只需在.asp中声明使用不同的脚本语言即可。下面是一个典型的在同一.asp文件中使用两种脚本语言的例子:
<HTML>
<BODY>
<TABLE>
<% Call Callme%>
</TABLE>
<% CallViewDate%>
</BODY>
</HTML>
<SCRIPT LANGUAGE = VBScript RUNAT=Server>
Sub Callme
Response.Write\\\\\\\"<TR><TD>Call</TD><TD>Me</TD></TR>\\\\\\\"
End Sub
</SCRIPT>
<SCRIPT LANGUAGE = JScript RUNAT=Server>
function ViewDate()
{
var x
x=new Date()
Response.Write(x.toString())
}
</SCRIPT>
这是各位在本文中接触的第一个真正的ASP程序,千万不要被“< % %>”符号搞糊涂,这其实是标准的ASP定界符,而“<SCRIPT></SCRIPT>”之间的就是脚本语言。ASP不同于脚本语言,它有自己特定的语法,所有的ASP命令都必须包含在<%和%>之内,如:<%test=\\\\\\\"English\\\\\\\"%>,ASP通过包含在<%和%>中的表达式将执行结果输出到客户浏览器,如:<%=test%>就是将前面赋给变量test的值English发送到客户浏览器中,而当变量test的值为Mathematics时,以下程序:
This weekend we will test < % = test % >.
在客户浏览器中则显示为:
This weekend we will test Mathematics.
学习ASP最好的方法莫过于亲自动手编写,为了在最短的时间内使各位掌握ASP的程序设计技巧,本文将采取实例分析法,通过一系列的实例让各位在实践中学习ASP。建立一个ASP页面,你所需的只是打开一个文本编辑器,如:Notepad,然后跟我开始动手编写第一个ASP程序。下面我们将建立一个自动监测浏览时间并根据不同时段动态显示不同页面内容的ASP程序,请将以下代码剪贴到你的文本编辑器中,并存为test1.asp:
<html>
<body>
<FONTCOLOR=\\\\\\\"Green\\\\\\\">
< % If Time < #12:00:00# And Time >= #00:00:00# Then %>
早上好,今天天气不赖啊!
< % Else If Time < #19:00:00# And Time >= #12:00:00# Then %>
下午好!
< % Else % >
哈喽!今晚你有没有去IRC聊天!
< % End If % >
</body>
</html>
将test1.asp保存在WEB服务器的虚拟目录(如:aspsamp/)下,并在浏览器中用HTTP的方式进行浏览,如:http://yourcomputername/aspsamp/test1.asp,你将会新奇地发现,你的页面真的活起来了。虽然,这只是一个非常简单的实例,而且这一功能完全可以通过javascript完成,但是不难发现使用ASP要比javascript简洁、迅速得多,而且运用此法,你完全可以轻而易举地令你的网页在不同的时段展示不同的风格。此例中的“Time”实际上是一个VBScript 内置的显示系统当前时间的函数,由于系统默认的脚本语言是VBScript,因此当你在ASP命令中调用该函数时,脚本引擎会自动将其转换成当前的系统时间。接下来我们将给test1.asp添加一点色彩,在<body>标识中添加“bgcolor=\\\\\\\"< % =bgc %> ”即变为< body bgcolor=\\\\\\\"< % =bgc %>\\\\\\\">,并在 < body> 标 记 前 添 加 如 下 语 句:
<% If Time < #12:00:00# And Time >= #00:00:00# Then
bgc=\\\\\\\"silver\\\\\\\"
Else If Time < #19:00:00# And Time >= #12:00:00# Then
bgc=\\\\\\\"navy\\\\\\\"
Else
bgc=\\\\\\\"red\\\\\\\"
EndIf
%>
如此一来,当用户在不同的时段访问你的页面时,他们将会看到不同的页面背景色。我们可以做的事情还有很多,譬如你想知道在凌晨至十二点之间浏览你页面的客户的姓名,并向他或她问好,那么下面的这段程序将能助你达成心愿。首先你需要在页面中设置表单,将以下HTML代码剪贴到“< % If Time < #12:00:00# And Time >= #00:00:00# Then %> ” 之后:
欢迎光临我的主页,请填写以下信息:
<FORM METHOD=\\\\\\\"POST\\\\\\\" ACTION=\\\\\\\"test1.asp\\\\\\\">
<P>
First Name:<INPUT NAME=\\\\\\\"fname\\\\\\\" SIZE=\\\\\\\"48\\\\\\\">
<P>
Last Name:<INPUT NAME=\\\\\\\"lname\\\\\\\"SIZE=\\\\\\\"48\\\\\\\">
<P>
Title:<INPUT NAME=\\\\\\\"title\\\\\\\" TYPE=RADIO VALUE=\\\\\\\"mr\\\\\\\">Mr.
<INPUT NAME=\\\\\\\"title\\\\\\\" TYPE=RADIO VALUE=\\\\\\\"ms\\\\\\\">Ms.
<P><INPUT TYPE=SUBMIT><INPUT TYPE=RESET>
</FORM>
然后在以上HTML代码后面添加如下ASP命令:
<%
title=request.form(\\\\\\\"title\\\\\\\")
if title=\\\\\\\"mr\\\\\\\" then
%>
欢迎您Mr.<%=request.form(\\\\\\\"fname\\\\\\\")%>。
<%else if title=\\\\\\\"ms\\\\\\\" then%>
欢迎您Ms.<%=request.form(\\\\\\\"fname\\\\\\\")%>。
<%else%>
<B><fontcolor=blue>欢迎您<%=request.form(\\\\\\\"fname\\\\\\\")&\\\\\\\"\\\\\\\"&request.form(\\\\\\\"lname\\\\\\\")%>?</font></B>
<%endif%>
保存文件test1.asp,并在浏览器中以HTTP方式进行浏览,如果此时的系统时间在凌晨0:00:00和中午12:00:00之间的话,浏览器将显示如下画面:
这其实是一个在Internet和Intranet上常见的功能,即当用户在浏览器端填写完表单后,通过调用一个通用网关程序将用户数据传送到服务器,由服务器进行处理后再将结果返还给客户浏览器。过去为了实现这样的功能必须编写一个独立于HTML之外的CGI程序,并通过HTML进行调用,撇开CGI编写复杂等缺点不谈,CGI的执行效率也是一个大问题,每一个表单(form)均须执行一个可执行文档,当多人同时上线使用时,多个文档同时执行,将大大降低WEB服务器的执行速度,如今ASP提供了与HTML完全相融的编程环境,显然要比使用CGI便捷得多。
在本期的最后让我们再来看看ASP的循环功能,譬如你希望当客户在晚间7:00至凌晨0:00:00浏览你的页面时,在页面中央显示6个笑脸表示问候,那么你只需要将以下命令剪贴到“ Good Evening! ” 后面即可:
< % for i=1 to 6 %>
< p>< center>< img src=\\\\\\\"smile.gif\\\\\\\" width=\\\\\\\"32\\\\\\\" height=\\\\\\\"32\\\\\\\" alt=\\\\\\\" 晚上好 \\\\\\\">< /p>
< % next %>
这是一个最最基本的循环语句,它将一个笑脸图片重复调用六次并显示在页面上。当然此例的效果完全可以用HTML做到,但是不难发现使用ASP大大缩短了代码的重复编写,使得程序具有良好的可阅读性。另外,当你制作一个诸如根据用户投票来给所评测的对象评定星级的评测站点时,使用此法,你就完全不需要为每一个星级制作一幅图片。如果一个对象被评为4星级,那只需将一颗星的图片循环显示4次,以此类推即可。当然,当工作量较小的时候你不会感觉到ASP的好处,然而一旦数据量巨增,你将会深刻的体会到ASP动态网站给你带来的前所未有的轻、爽感受!
动态网站设计十八般武艺 ASP篇(二)
本篇将继续介绍一些用ASP编写的WEB动态功能。由于WEB浏览器标准的不一致从而使得如何能够让自己制作的网站去适应各种不同的浏览器成为了广大网站设计者最为头疼的事,在如今的形势之下,我们不肯也不可能去抛弃Netscape或IE中的任何一种客户群,但我们有时候又不得不去考虑客户端浏览器的实际浏览效果,过去我们常用javascript编写一段程序来辨别客户端使用的不同的浏览器,那么今天就让我们来看看如何使用ASP更为便捷且精确地达到这一目的。将以下代码,剪贴到你的Notebook中,并保存为browser.asp。
<%@LANGUAGE=VBScript%>
<HTML>
<HEAD>
<TITLE>用ASP提供的浏览器性能组件来辨别客户浏览器</TITLE>
</HEAD>
<BODY BGCOLOR=\\\\\\\"White\\\\\\\" topmargin=\\\\\\\"10\\\\\\\" leftmargin=\\\\\\\"10\\\\\\\">
<font size=\\\\\\\"4\\\\\\\" face=\\\\\\\"Arial,Helvetica\\\\\\\">
<b>用ASP提供的浏览器性能组件来辨<br>别客户浏览器</b></font><br>
<hr size=\\\\\\\"1\\\\\\\" color=\\\\\\\"#000000\\\\\\\">
<!--定义并创建浏览器性能对象-->
<%
Dim bc
Set bc=Server.CreateObject(\\\\\\\"MSWC.BrowserType\\\\\\\")
%>
<!--在表格中描述客户浏览器的信息-->
<Table border=1>
<tr>
<td>Browser Name</td>
<td><%=bc.Browser%></Td>
<tr>
<td>Browser Version</td>
<td><%=bc.Version%></Td>
<tr>
<td>Major Version</td>
<td><%=bc.Majorver%></Td>
<tr>
<td>Minor Version</td>
<td><%=bc.Minorver%></Td>
<tr>
<td>Frame Support</td>
<td><%=bc.Frames%></Td>
<tr>
<td>Table Support</td>
<td><%=bc.Tables%></Td>
<tr>
<td>Cookie Support</td>
<td><%=bc.Cookies%></Td>
<tr>
<td>Background Sound Support</td>
<td><%=bc.Background Sounds%></Td>
<tr>
<td>VB Script Support</td>
<td><%=bc.VB Script%></Td>
<tr>
<td>Java Script Support</td>
<td><%=bc.javascript%></Td>
</table>
</BODY>
</HTML>
用http方式浏览该文件,根据使用的浏览器的不同,你会看到类似下图(Asp2b.gif)的页面。在本例中我们用到了一个ASP提供的ActiveX组件--\\\\\\\"BrowserCapabilities\\\\\\\"。 ActiveX组件作为基于Web的应用程序部分在Web服务器上运行,组件提供了应用程序的主要功能(如访问、修改数据库等),这样WEB设计者们就不必创建或重新创建执行这些任务的代码,从而提高了工作的效率,有关ActiveX组件将在今后详细讨论。为了使用ASP辨别客户浏览器,在这里我们利用\\\\\\\"BrowserCapabilities\\\\\\\"组件创建了一个BrowserType对象,该对象提供带有客户端网络浏览器功能说明的用户脚本,当浏览器连接到网络服务器上时,它会自动发送一个UserAgentHTTP标题,该标题是一个声明浏览器及其版本的ASCII字符串。此BrowserType对象将该标题和在Browscap.ini文件中的项进行比较(Win98、IIS3、IIS4的用户分别可以在以下目录中\\\\\\\"win98\\\\\\\\system\\\\\\\\inersrv\\\\\\\"、\\\\\\\"\\\\\\\\winnt\\\\\\\\system32\\\\\\\\inetsrv\\\\\\\\asp\\\\\\\\cmpnts\\\\\\\"、\\\\\\\"\\\\\\\\winnt\\\\\\\\system32\\\\\\\\inetsrv\\\\\\\"找到该文件)。如果找到匹配的项,则该BrowserType对象将认为浏览器列表属性与UserAgent标题匹配。若该对象在browscap.ini文件中找不到与该标题匹配的项,那么将使用默认的浏览器属性。若该对象既未找到匹配项且browscap.ini文件中也未指定默认的浏览器设置,则它将每个属性都设为字符串\\\\\\\"UNKNOWN\\\\\\\"。我们可以通过更新browscap.ini文件将属性或新的浏览器定义添加到该组件中,从而扩大ASP识别的浏览器范围和精确度。下面列出了browscap.ini中的一部分内容(不包括注释部分):
[IE 4.0] ;;HTTPUserAgentHeader
browser=IE;;指定该浏览器的名称。
Version=4.0;;指定该浏览器的版本号。
majorver=4;;指定主版本号
minorver=0;;指定副版本号
frames=TRUE;;指定该浏览器是否支持框架。
tables=TRUE;;指定该浏览器是否支持表格。
cookies=TRUE;;指定该浏览器是否支持cookies。
backgroundsounds=TRUE;;指定该浏览器是否支持背景音乐。
vbscript=TRUE;;指定该浏览器是否支持VBScript。
javascript=TRUE;;指定该浏览器是否支持JScript。
javaapplets=TRUE;;指定该浏览器是否支持Java程序。
ActiveXControls=TRUE;;指定该浏览器是否支持ActiveX控件。
Win16=False;;指定该浏览器是否支持Win16
beta=False;;指定该浏览器是否测试版。
cdf=True;;指定该浏览器是否支持用于Web预测的ChannelDefinitionFormat。
;;ie4.01
[Mozilla/4.0(compatible;MSIE4.01*;Windows95)]
parent=IE4.0;;父标签允许第二个浏览器继承第一个浏览器的定义
version=4.01
minorver=01
platform=Win98
;;DefaultBrowser;;指定默认的浏览器的设置
[DefaultBrowserCapabilitySettings]
browser=Default
frames=FALSE
tables=TRUE
cookies=FALSE
backgroundsounds=FALSE
vbscript=FALSE
javascript=FALSE
在上面的例子中,父标签允许第二个浏览器继承第一个浏览器的定义,以便MicrosoftInternetExplorer4.01定义得以继承MicrosoftInternetExplorer4.0定义全部的属性(例如,frames=TRUE、tables=TRUE以及cookies=TRUE)。并通过添加platform=Win98行来指定平台,用version=4.01重写版本信息。
在先前的browser.asp中我们仅仅是将客户浏览器的属性一一罗列了出来,下面让我们添加一些动态的效果。将以下代码剪贴到文件browser.asp中(编辑注:为显示方便,所有“<”符号后都多加了个空格,实际使用时请注意去掉。):
<%if (bc.frames=TRUE) then%>
你的浏览器支持框架!<br>
<%else%>
难道现在你还在使用不支持框架的浏览器???<br>
<%end if%>
<%if (bc.tables=TRUE) then%>
你的浏览器支持表格。<br>
<%else%>
难道现在你还在使用不支持表格的浏览器???<br>
<%end if%>
<%if(bc.BackgroundSounds=TRUE)then%>
有没有听到美妙的音乐???<br>
<%else%>
可惜,您的浏览器不支持背景音乐。<br>
<%endif%>
<%if(bc.vbscript=TRUE)then%>
您的浏览器支持Vbscript。<br>
<%else%>
您的浏览器不支持Vbscript。<br>
<%endif%>
<%if(bc.javascript=TRUE)then%>
您的浏览器支持javascript。<br>
<%else%>
您的浏览器不支持javascript。<br>
<%endif%>
在你的浏览器中刷新browser.asp,程序将自动辨别浏览器的属性并动态显示不同的信息。不难发现在整个browser.asp文件中几乎没有用到任何复杂的编程,就轻而易举的达到了动态鉴别客户浏览器并动态产生响应事件的效果。事实上,这个程序的关键就在于前文提到的ActiveX组件--\\\\\\\"BrowserCapabilities\\\\\\\",它的作用类似于一个Function,只需简单地在程序中调用该组件即能达到你所希望的效果。

动态网站设计十八般武艺 ASP篇(三)
在开始学习脚本语言之前,你应该理解一些简单的概念--变量、进程。所谓变量是计算机内存中已命名的存储位置,其中包含了数字或字符串等数据,它使用户便于理解脚本操作的名称,为用户提供了一种存储、检索和操作数据的途径。程序是由一个或多个进程组成的,在VBScript中,进程就是撝噶羁閿,通常意义上的进程,如Sub,只是为了简单的数据处理。
在VBScript中,严格的来讲变量是不用声明的,如:
<%Mystring=\\\\\\\"This is my string\\\\\\\"%>
然而,即使在使用变量前不需要去声明变量,也应养成在编程时声明变量的良好习惯,因为这样有助于防止错误发生。声明一个变量意味着告诉脚本引擎,有一个特定名称的变量,这样就可以在脚本中引用该变量。在VBScript中声明一个变量可以使用“Dim”语句,如下:
<script language=\\\\\\\"VBScript\\\\\\\">
<!--
Option Explicit’要求在脚本中声明所有的变量
Dim Mystring
Mystring=\\\\\\\"This is my string\\\\\\\"
-->
</script>
变量的作用域即生命期,决定哪些脚本命令可访问变量。在过程内部声明的变量具有局部作用域。每执行一次过程,变量就被创建然后消亡。而过程外部的任何命令都不能访问它。在过程外部声明的变量具有全局作用域,其值能被ASP页上的任何脚本命令访问和修改。声明变量时,局部变量和全局变量可以有相同的名称。而改变其中一个的值并不会改变另一个的值。如果没有声明变量,则可能不小心会改变一个全局变量的值。例如,以下脚本命令返回值1,虽然有两个名为Y变量:
<%
Dim YY=1 Call Set Local Variable Response.WriteY
Sub Set Local Variable
Dim Y
Y=2 End Sub%>
由于变量没有显式声明,以下的脚本命令将返回2。当过程调用将Y设置为2时,脚本引擎认为该过程是要修改全局变量:
<%
Y=1 Call Set Local Variable Response.WriteY
Sub Set Local Variable
Y=2
End Sub%>
然而,全局变量仅在单个ASP页中可用,要使它在单个ASP页之外可用,就必须为变量赋予会话或应用程序作用域。会话作用域变量对一个用户所请求的ASP应用程序中的所有页都是可用的。应用程序作用域变量也如此。对单个用户来说,会话变量是存储信息的最佳途径,例如,用户首选项、用户名或用户的标识。对于一个特殊应用程序的所有用户,应用程序作用域是存储信息的最佳途径,例如,应用程序特定的问候语或应用程序所需的初始值。ASP提供两个内建对象来让您存储变量:Session对象和Application对象,这将在今后的ASP内建对象中着重讨论。
让我们再来看看常量的定义,常量是用来代替一个数或字符串的名称,它在整个脚本中保持不变。您可以使用Const语句在VBScript中创建用户自定义常数。使用Const语句可以创建名称具有一定含义的字符串型或数值型常数,并给它们赋原义值。例如:
如:<%Const mystring=\\\\\\\"这是一个常量\\\\\\\"%>
<%Const myage=100%>
请注意字符串文字包含在两个引号(\\\\\\\"\\\\\\\")之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号(#)之间。例如:
<%Const CutoffDate=#6-1-97#%>
在理解了常量和变量之后,我们来看看什么是过程。它是一组能执行指定任务且具有返回值的脚本命令。您可以定义自己的过程,然后在脚本中反复调用它们。您可以将过程定义放在调用过程的.asp文件中,也可以将通用过程放在一个共享的.asp文件中,然后用SSI#include指令将其包含进其他调用其过程的.asp文件中。您还可选择另一种方法,即把这些功能打包在ActiveX组件中。过程定义可出现在<SCRIPT>和</SCRIPT>标记内部且必须遵循声明脚本语言的规则。如果过程所用的语言与主脚本语言不同,则要使用<SCRIPT>元素。主脚本语言中的过程用脚本分界符(<%和%>)分隔。用HTML<SCRIPT>标记时,必须使用两个属性来保证服务器端能够处理脚本。使用<SCRIPT>标记的语法如下:
<SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT>
procedure definition
</SCRIPT>
这里的RUNAT=SERVER属性通知Web服务器在服务器上处理脚本。若不设置该属性,脚本将由客户端浏览器处理。LANGUAGE属性决定此脚本块所用的脚本语言。您可以指定任何一种具有脚本引擎的语言。请使用VBSCRIPT指定VBScript;用JSCRIPT指定JScript。若不设置LANGUAGE属性,将用主脚本语言解释此脚本块。
在VBScript中,过程被分为两类:Sub过程和Function过程。Sub过程是包含在Sub和EndSub语句之间的一组VBScript语句,执行操作但不返回值。Sub过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Sub过程无任何参数,则Sub语句必须包含空括号()。
Function过程是包含在Function和EndFunction语句之间的一组VBScript语句。Function过程与Sub过程类似,但是Function过程可以返回值。Function过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Function过程无任何参数,则Function语句必须包含空括号()。Function过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名的。Function返回值的数据类型总是Variant。在下面的示例中Sub过程使用两个固有的(或内置的)VBScript函数,即MsgBox和InputBox,来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用VBScript创建的Function过程完成,Celsius函数将华氏度换算为摄氏度。Sub过程ConvertTemp调用此函数时,包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。
Sub Convert Temp()
temp=Input Box(\\\\\\\"请输入华氏温度。\\\\\\\",1)
MsgBox\\\\\\\"温度为\\\\\\\"&Celsius(temp)&\\\\\\\"摄氏度。\\\\\\\"
End Sub
Function Celsius(fDegrees)
Celsius=(fDegrees-32)*5/9
End Function
给过程传递数据的途径是使用参数。参数被作为要传递给过程的数据的占位符。参数名可以是任何有效的变量名。使用Sub语句或Function语句创建过程时,过程名之后必须紧跟括号。括号中包含所有参数,参数间用逗号分隔。例如,在下面的示例中,fDegrees是传递给Celsius函数的值的占位符:
Function Celsius(fDegrees)
Celsius=(fDegrees-32)*5/9
End Function
要从过程获取数据,必须使用Function过程。请记住,Function过程可以返回值;Sub过程不返回值