1.如何用Asp判断你的网站的虚拟物理路径 ^-Knx!z
答:使用Mappath方法 l|Z<pD
< p align="center" >< font size="4" face="Arial" >< b > yOQEF\
The Physical path to this virtual website is: \dG#hH4ZD
< /b >< /font > M.loG4r!
< font color="#FF0000" size="6" face="Arial" > *@C]\)
< %= Server.MapPath("\")% > yE80*C~d
< /font >< /p > -eA3o2'
2.我如何知道使用者所用的浏览器? UyWKE<
答:使用the Request object方法 aV6l"A]
strBrowser=Request.ServerVariables("HTTP_USER_AGENT") M10u?
If Instr(strBrowser,"MSIE") < > 0 Then 0nDlqy6b1b
Response.redirect("ForMSIEOnly.htm") JOA_2qa>\
Else {;kH&Pp
Response.redirect("ForAll.htm") :AzP3~BI
End If F:P&hK
+~H mPQ
3.如何计算每天的平均反复访问人数 ' >F_y t9
答:解决方法 82q_"y>6
< % startdate=DateDiff("d",Now,"01/01/1990")
F[65)"^
if strdate< 0 then startdate=startdate*-1 }$zJdf,\
avgvpd=Int((usercnt)/startdate) % > [HV9KAoA
显示结果 a BHV
< % response.write(avgvpd) % > j+E[[
that is it.this page have been viewed since November 10,1998 F9Bj$`#)
pH'1be{K
4.如何显示随机图象 G.}Ex!8R7_
< % dim p,ppic,dpic -H;%1y$A-
ppic=12 CK{.Ic^
randomize -nvK*rn>}
p=Int((ppic*rnd)+1) :M%s:,]R
dpic="graphix/randompics/"&p&".gif" hny):59f
% > lZq`,E_L
显示 >h+G$&8[y
< img src="< %=dpic% >" > 02EbmP
T5jZd@VT,
5.如何回到先前的页面 +EnJyli
答:< a href="< %=request.serverVariables("Http_REFERER")% >" >preivous page< /a > ,XZ[L?
>
或用图片如:< img src="arrowback.gif" alt="< %=request.serverVariables("HTTP_REFERER")% >" > o (OC3
| gou#zi
6.如何确定对方的IP地址 7T)J{:+0!|
答:< %=Request.serverVariables("REMOTE_ADDR)% > f7Dx.-
q%/ciPgE
7.如何链结到一副图片上 BWz7m9T
答:< % @Languages=vbscript % > IIW6;jS
< % response.expires=0 R\oas"
strimagename="graphix/errors/erroriamge.gif" *"%MT:
response.redirect(strimagename) NyJ=^=F#
% > qZ:-- ,9+
7r_Y.
8.强迫输入密码对话框 ,uFdhA(i@'
答:把这句话放载页面的开头 lk5}bnd5
< % response.status="401 not Authorized" #$qhxYyd
response.end ZUW~ZZ7Z:
% > HKr6h?Si^
&>!WhC16
9.如何传递变量从一页到另一页 >H,t^i}@
答:用 HIDDEN 类型来传递变量 in^Rf`
"
< % form method="post" action="mynextpage.asp" > x4HVB
< % for each item in request.form % > ) $wX~k
< input namee="< %=item% >" type="HIDDEN" -ty_<m]
value="< %=server.HTMLEncode(Request.form(item)) % >" > |c]Y1WwDx
< % next % > m;v/(d>
< /form > Ff\U]g
3j2% '$>E^
10.为何我在 asp 程序内使用 msgbox,程序出错说没有权限 jx=2^A/i2-
答:由于 asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框,as follows: ^H,o I*
<%yourVar="测试对话框"%> 9J$z/j;X
<script language='javascript'> <.d0GD`^
alert("<%=yourvar%>") O*<,lq 0K
</script> bB^SD] }C
qP"<vZ
11.有没有办法保护自己的源代码,不给人看到 @'K+
答:可以去下载一个微软的Windows Script Encoder,它可以对asp的脚本和客户端javascript/vbscript脚本进行加密。。。不过客户端加密后,只有ie5才能执行,服务器端脚本加密后,只有服务器上安装有script engine 5(装一个ie5就有了)才能执行。 k($N_XlE
CPI7&jqu
12.怎样才能将 query string 从一个 asp 文件传送到另一个? hE-u9i
答:前者文件加入下句: Response.Redirect("second.asp?" & Request.ServerVariables("QUERY_STRING")) N o}Ly{
U[S#axak
13.global.asa文件总是不起作用? 7@.UkBOx
答:只有web目录设置为web application, global.asa才有效,并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码? O1nfz> L`
)32BM+f"77
14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码? %rz.>4i)(
答: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处理,效率将降低。 hb>,\46}
d.7pc
P
15.如何注册组件 ((U-JeFW
答:有两种方法。 S> f8j?n
第一种方法:手工注册 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 sQT0y(FW
"[.adiw
第二种方法:使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色,但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件,大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下: V9 pKbX
1) 打开IIS管理控制台。 v:YW[THre
2) 展开transaction server,右键单击"pkgs installed"然后选择"new package"。 ]hBp
elKJ
3) 单击"create an empty package"。 nnU
&R
4) 给该包命名。 B=:7N;BT
5) 指定administrator帐号或则使用"interactive"(如果服务器经常是使用administrator 登陆的话)。 cD6$C31Y]
6) 现在使用右键单击你刚建立的那个包下面展开后的"components"。选择 "new then component"。 Ny;(1N|&3
7) 选择 "install new component" 。 &b 2Vt
8) 找到你的.dll文件然后选择next到完成。 (~r"N?`
要删除这个对象,只要选择它的图标,然后选择delete。 o3hsPzOQx
附注:特别要注意第二种方法,它是用来调试自己编写组件的最好方法,而不必每次都需要重新启动机器了。 B6gSt3w.
+G3&{#D
?
16. ASP与Access数据库连接: 3B(6^iS
,qgph^C
<%@ language=VBscript%> 89>U Koc?
<% Ld[zOx
dim conn,mdbfile zkdyfl5
mdbfile=server.mappath("数据库名称.mdb") iBy:HH
set conn=server.createobject("adodb.connection") ]-$0?/`p8
conn.open "driver={microsoft access driver (*.mdb)};uid=admin;pwd=数据库密码;dbq="&mdbfile mis
cmD
/\-qz$
%> k,xY\r$
f$x\~y<[
17. ASP与SQL数据库连接: :N~1fvx
;a/Gs^W
<%@ language=VBscript%> Tn+6:<OFdO
<% 9L}=xX`>?
dim conn i#t)tM"
set conn=server.createobject("ADODB.connection") ,%+i}H,3
con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 6xs_@Vk|d
%> /-wAy-W
?hh4M
建立记录集对象: g4WN+y`
ZB'/DO=i
set rs=server.createobject("adodb.recordset") -.|V S|y
rs.open SQL语句,conn,3,2 C?e1 a9r
.0:twj
[s-Km/
18. SQL常用命令使用方法: Uhc2`r#q
yWa-iHWC
(1) 数据记录筛选: y!SElKj
igp[cFN
sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" 'aQ"&GX@
NhyVX%qt:
sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]" <im
BFw
yz}Agc4.I
sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]" F:.rb
Ei
(gQ^jmZPG
sql="select * from 数据表 where 字段名 in ('值1','值2','值3')" DFKU?#R
c|[:vin
sql="select * from 数据表 where 字段名 between 值1 and 值2" uI7 d?s
>A#wvQl7
(2) 更新数据记录: }vkrWy^
|->{NUZ{
sql="update 数据表 set 字段名=字段值 where 条件表达式" oagxTFh8~
q/Dc*Qn
m
sql="update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式" <@9p|[!
`MAluu+b
(3) 删除数据记录: >-YPCW
CwQgA%)!i
sql="delete from 数据表 where 条件表达式" d]0.6T1[K
)6#dxb9
sql="delete from 数据表" (将数据表所有记录删除) e%w>QN`
~ y%8uHL:
(4) 添加数据记录: KH)(xB=
XUmL 8
sql="insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" % (R10G
{O,D9 <
sql="insert into 目标数据表 select * from 源数据表" (把源数据表的记录添加到目标数据表) pOlo_na}[
~9JU_R^%m
(5) 数据记录统计函数: 6D,xs}j1
UH1AT#?!W
AVG(字段名) 得出一个表格栏平均值 @~0kSA7
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计 9"g=it2Rh6
MAX(字段名) 取得一个表格栏最大的值
,vEwck#
MIN(字段名) 取得一个表格栏最小的值 &B\tcF
SUM(字段名) 把数据栏的值相加 F gM<2$h
_D:#M
引用以上函数的方法: Z-`j)3Y
JnCp'`
sql="select sum(字段名) as 别名 from 数据表 where 条件表达式" ]%jlaXb
set rs=conn.excute(sql) (i^3Lw :
[L 0`B9TD~
用 rs("别名") 获取统的计值,其它函数运用同上。 cQ~}qE>I
h4x*C=?A
(5) 数据表的建立和删除: E(A7D XzbR
V`$Jan
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) z5PFppSQ
GUJ[2/V~A
例:CREATE TABLE tab01(name varchar(50),datetime default now()) sZ #Ck"n
*jo y%F
DROP TABLE 数据表名称 (永久性删除一个数据表) uBI?nv,
A-e#&pJ
19. 记录集对象的方法: 2mAXBqdm
8 munw
rs.movenext 将记录指针从当前的位置向下移一行 6k"'3AKaR
rs.moveprevious 将记录指针从当前的位置向上移一行 keNPlK%>
rs.movefirst 将记录指针移到数据表第一行 mHjds77e
rs.movelast 将记录指针移到数据表最后一行 pIdJ+gu(s
rs.absoluteposition=N 将记录指针移到数据表第N行 mRB-}
rs.absolutepage=N 将记录指针移到第N页的第一行 @BWroNg{
rs.pagesize=N 设置每页为N条记录 0lR/6CB
rs.pagecount 根据 pagesize 的设置返回总页数 !> T.*8
rs.recordcount 返回记录总数 fyIL/7hzf4
rs.bof 返回记录指针是否超出数据表首端,true表示是,false为否 Xxcv5.ug
rs.eof 返回记录指针是否超出数据表末端,true表示是,false为否 3+_? /}<
rs.delete 删除当前记录,但记录指针不会向下移动 }R:e[lKj
rs.addnew 添加记录到数据表末端 ^& ZlV
rs.update 更新数据表记录 ab8uY.j
*[jG^w0z8~
--------------------------------------- ]Ln2|$R
z"8%W?o>
20 Recordset对象方法 WmTSxneo
rD)yEuYX
Open方法 Dk4Jg++
+HNY!fv9
recordset.Open Source,ActiveConnection,CursorType,LockType,Options XYIZ^_My
[8AGW7_
Source |i'V\"
hW
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。 p_S8m|%
MVU5+wX
ActiveConnection
]5W0zNb*
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 WUx}+3eWv
rH7|r\] r
CursorType ~Emeo&X
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下: 3eQ-P8LS
-------------------------------------------------------------- Qrjo@_+w!
常数 常数值 说明 J<Di2b+
------------------------------------------------------------- preKg$U
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)。 Q':x i;?Kt
adOpenKeyset 1 启动一个Keyset类型的游标。 2C^/;z
adOpenDynamic 2 启动一个Dynamic类型的游标。 iErY2~?
adOpenStatic 3 启动一个Static类型的游标。 ~;O|$xL
------------------------------------------------------------- .VN "j
以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。 )O~LXK=b
Iih~W&
------------------------------------------------------------- [<P(S~J
Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic P3se"pP
------------------------------------------------------------- f3Ior.n(
AbsolutePage 不支持 不支持 可读写 可读写 P.mz$M
AbsolutePosition 不支持 不支持 可读写 可读写 -o*IJQ_
ActiveConnection 可读写 可读写 可读写 可读写 T8E=}!68w}
BOF 只读 只读 只读 只读 uTGd{w@]0|
Bookmark 不支持 不支持 可读写 可读写 ]kA0C~4
CacheSize 可读写 可读写 可读写 可读写 [mphiH/
CursorLocation 可读写 可读写 可读写 可读写 IFNs)*
CursorType 可读写 可读写 可读写 可读写 T6MlKcw,t
EditMode 只读 只读 只读 只读 @s RRcP~
EOF 只读 只读 只读 只读 7?<.L
Filter 可读写 可读写 可读写 可读写 ?_q
e
2R.
LockType 可读写 可读写 可读写 可读写 `oP :F[B
MarshalOptions 可读写 可读写 可读写 可读写 ?#"rI6
MaxRecords 可读写 可读写 可读写 可读写 L
A-H
PageCount 不支持 不支持 只读 只读 |f1 S&b.
PageSize 可读写 可读写 可读写 可读写 WGFp<R
RecordCount 不支持 不支持 只读 只读 {pMbkAQ@
Source 可读写 可读写 可读写 可读写 hI*gw3V
State 只读 只读 只读 只读 ($EA/|z
Status 只读 只读 只读 只读 t98t&YUpm
AddNew 支持 支持 支持 支持 s*{l}~fPkW
CancelBatch 支持 支持 支持 支持 ]b!o(5m
CancelUpdate 支持 支持 支持 支持 hN*,]Z{
Clone 不支持 不支持 uu L"o
Close 支持 支持 支持 支持 c'n EbelE
Delete 支持 支持 支持 支持 /tI8JXcUK
GetRows 支持 支持 支持 支持 O@r%G0Jge
Move 不支持 支持 支持 支持 UN#XP$utY
MoveFirst 支持 支持 支持 支持 ~pA_E!3W
MoveLast 不支持 支持 支持 支持 dC8$Ql^<
MoveNext 支持 支持 支持 支持 h<2o5c|
MovePrevious 不支持 支持 支持 支持 x`K<z
J
NextRecordset 支持 支持 支持 支持 "&*O7cs$pA
Open 支持 支持 支持 支持 SskvxH+7
Requery 支持 支持 支持 支持 h^R EBPe
Resync 不支持 不支持 支持 支持 _<pSCR0
Supports 支持 支持 支持 支持 ^6j: lL
Update 支持 支持 支持 支持 `Yn:fL7S
UpdateBatch 支持 支持 支持 支持 m`
^o<V&
-------------------------------------------------------------- (UWWULV
其中NextRecordset方法并不适用于Microsoft Access数据库。 8&?Kg>M
|Qo`K%8
LockType $5kb3x<W
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下: DXu915
=.`(KXT
------------------------------------------------------------- .lnyn|MVb
常数 常数值 说明 S]&f+g}&w
-------------------------------------------------------------- sy`@q<h(
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法 $sK8l=#
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。 5v6 x
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。 tE3#Uq
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、 ^`>,~$Q
删、改的操作。