效果:
g:\asp_www\test\course\server_mappath.asp
思考:如何获取站点根目录的实际路径?如何获取某个目录的实际路径?
server_urlencode.asp
<%
'url encode
response.write server.urlencode("a\time_now")
%>
效果:
a%5ctime%5fnow
4. application
定义:用来存储、读取用户共享的应用程序信息,如可以用此对象在网站的用户间传送信息,当服务器重启后信息丢失。
方法:
lock:防止其它用户访问application集
unlock:使其它用户可以访问application集
事件:
onend:由终止网络服务器、改变global.asa文件触发
onstart:由应用程序中对网页的第一次申请触发
例子:
application_counter.asp
<%
'一个使用application制作的简单计数器
application.lock
application("clicks")=application("clicks")+1
application.unlock
response.write "您是本站第 "&application("clicks")&" 位访客!"
response.write "<br><br>您来自 "&request.servervariables("remote_addr")
%>
效果:
您是本站第 1 位访客!
您来自 10.1.43.238
思考:本例中lock和unlock有何作用?
5. session
定义:存储、读取特定用户对话信息,如可存储用户对网站的访问信息,当服务器重启后信息丢失。
方法:
abandon:处理完当前页面后,结束一个用户会话
属性:
timeout:用户会话持续时间(分钟数)
事件:
onend:在session timeout时间以外,用户不再申请页面触发该事件
onstart:由用户对网页的第一次申请时触发
例子:
session_counter.asp
<%
'一个使用session制作的简单计数器
session("clicks")=session("clicks")+1
response.write "您是本站第 "&session("clicks")&" 位访客!"
response.write "<br><br>您来自 "&request.servervariables("remote_addr")
%>
效果:
您是本站第 1 位访客!
您来自 10.1.43.238
思考:既然session和application都能做到计数,那它们之间有什么区别?如果要做到满100重新开始计数如何实现?
三、使用asp操作数据库:
1.通过odbc或者ole方式连接的区别?
现在有两种连接数据库的方法。一方面,可以用odbc产生一个连接,这种连接与任何有odbc驱动器的数据库(即基本上是市场上所有的数据库)兼容;另一方面,可以用原始ole db提供商产生一个连接。
该用哪个提供商?尽可能用原始ole db提供商,因为它提供了对数据更有效的访问。microsoft正逐步用ole db取代odbc标准,应该仅仅在没有原始ole db提供商时使用odbc。
⑴.用odbc方式连接sql server:
①.配置odbc
②.连接代码:
conn_odbc.asp
<%
set conn = server.createobject("adodb.connection")
'conn.open "dsn=course_dsn;uid=course_user;pwd=course_password;database=course"
conn.open "course_dsn","course_user","course_password"
%>
注意:在配置mydsn时若指定默认数据库为course则上述代码作用想同,否则第二行的连接方式更有灵活性,可以指定连接某个数据库(当然,前提是course_user对这个数据库有操作权限)。
⑵.用ole方式连接sql server:
conn_ole.asp
<%
set conn = server.createobject("adodb.connection")
conn.open "provider=sqloledb;data source=10.1.43.238,2433; uid=course_user;pwd=course_password;database=course"
%>
2.操作数据库:connection和recordset
联合使用connection和recordset操作数据库,或者只使用connection操作数据库。
例子:
⑴.联合使用connection和recordset操作数据库
use_db_1.asp
<%
set conn=server.createobject("adodb.connection") '创建连接数据库的对象
conn.open "course_dsn","course_user","course_password" '使用该对象连接数据库
set rs=server.createobject("adodb.recordset") '创建记录集对象
rs.open "select * from user_info",conn,1,1 '使用记录集对象打开数据库
if rs.recordcount>0 then '如果有记录
response.write "user_id user_name<br>"
for i=1 to rs.recordcount '循环读取所有纪录
response.write rs("id")&" "&rs("user_name")&"<br>"
'向浏览器输出纪录的字段
rs.movenext '指针下移一行
if rs.eof then exit for '如果到达记录集底部则退出循环
next
end if
%>
效果:
user_id user_name
1 ahyi
3 test
⑵.只使用connection操作数据库:
use_db_2.asp
<%
set conn=server.createobject("adodb.connection") '创建连接数据库的对象
conn.open "course_dsn","course_user","course_password" '使用该对象连接数据库
conn.execute "delete from user_info"
%>
效果:
user_info表中所有数据被删除
思考:两种方式有和区别?各应用于什么场合?
3.如何使用事务处理、存储过程和视图?
⑴.使用存储过程
①.定义好存储过程
create procedure [output_1]
@sid int output
as
set @sid=2
create procedure [return_1]
(@user_name varchar(40),@password varchar(20))
as
if exists(select id from user_info where user_name=@user_name and password=@password)
return 1
else
return 0
create procedure [user_info_1]
(@user_name varchar(40),@password varchar(20))
as
select id from user_info where user_name=@user_name and password=@password
create procedure [user_info_2]
(@user_name varchar(40),@password varchar(20))
as
set xact_abort on
begin transaction
delete from user_info where user_name=@user_name and password=@password
commit transaction
set xact_abort off
create procedure [user_info_3] as
select * from user_info
②.在asp中调用
use_proc.asp
<!-- #include virtual="/adovbs.inc" -->
<%
set conn=server.createobject("adodb.connection")
conn.open "course_dsn","course_user","course_password"
'使用recordset调用带两个输入参数和返回纪录集的存储过程
'create procedure [user_info_1]
'(@user_name varchar(40),@password varchar(20))
'as
'select id from user_info where user_name=@user_name and password=@password
response.write "普通的调用方法:<br>"
set rs=server.createobject("adodb.recordset")
sql="user_info_1 '"&request.querystring("user_name")&"','"&request.querystring("password")&"'"
rs.open sql,conn,1,1
response.write rs("id")&"<br>"
rs.close
'使用recordset调用无输入参数,返回纪录集的存储过程,可以使用recordcount等属性
'create procedure [user_info_3] as
'select * from user_info
response.write "<br>返回纪录集,可以使用recordcount等属性:"
sql="exec user_info_3"
rs.open sql,conn,1,1
for i=1 to rs.recordcount
response.write "<br>"&rs("user_name")
rs.movenext
next
rs.close
set rs=nothing
'使用command调用带输出参数的存储过程
'create procedure [output_1]
'@sid int output
'as
'set @sid=2
response.write "<br><br>调用带输出参数的存储过程:<br>"
set cmd=server.createobject("adodb.command")
cmd.activeconnection=conn
cmd.commandtext = "output_1"
cmd.parameters.append cmd.createparameter("@sid",adinteger,adparamoutput)
cmd("@sid")=10
cmd.execute()
bbb=cmd("@sid")
response.write bbb&"<br>"
set cmd=nothing
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器