用ASP和SQL实现基于Web的事件日历
程序员文章站
2022-04-14 18:53:47
本文介绍如何建立基于web的日历,同时为不熟悉active server pages(asp)、sql和ado的开发者提供建立web站点的过程介绍,也为...
本文介绍如何建立基于web的日历,同时为不熟悉active server pages(asp)、sql和ado的开发者提供建立web站点的过程介绍,也为有经验的开发者提供了web站点可伸缩性方面的技巧。
随着网络应用的发展,基于web的日历越来越受到人们的重视,对于显示诸如最后期限或日程安排之类的重要事件,或显示谁在什么时候休假,基于web的日历都是有用的。本文描述了如何使用iis和sql server内的asp建立一个非常简单的基于web的日历,并允许你与其他人共享你的日程表或管理一组人员的日历。
建立sql服务器端
对web日历而言,我们在服务器端仅需保存表明事件性质的一个文本字符串即可,字符串最长为100个字符。设计源代码如下:
calendar.sql
-- 创建表
create table schedule
(
idschedule smallint identity primary key,
dtdate smalldatetime not null,
vcevent varchar(100) not null
)
go
-- 存储过程
create procedure getschedule (@nmonth tinyint, @nyear smallint)
as
select idschedule, convert(varchar, datepart(dd, dtdate)) 'nday', vcevent
from schedule
where datepart(yy, dtdate) = @nyear and datepart(mm, dtdate) = @nmonth
order by datepart(dd, dtdate)
go
create procedure addevent (@vcdate varchar(20), @vcevent varchar(100))
as
insert schedule
select @vcdate, @vcevent
go
create procedure deleteevent (@idschedule smallint)
as
delete schedule where idschedule = @idschedule
go
设计asp客户端
下图是web日历的主要用户界面,用户可以看到哪些事件是已安排的。另外,使用底部的链接可以在日历中按月前后翻动。
asp的实现代码如下:
header.asp
<@ language="vbscript"
enablesessionstate = false %>
<%
' 目的:表头包括用来启动所有页的文件
' 还包括全局函数
option explicit
response.buffer = true
response.expires = 0
sub doheader(strtitle)
%>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>event calendar - <%= strtitle %></title>
</head>
<body bgcolor="white" link="blue" alink="blue" vlink="blue">
<basefont face="verdana, arial">
<center><h1>event calendar</h1>
<h3><%= strtitle %></h3>
<%
end sub
function getdataconnection()
dim oconn, strconn
set oconn = server.createobject("adodb.connection")
strconn = "provider=sqloledb; data source=adspm; initial catalog=teamweb; "
strconn = strconn && "user id=teamweb; password=x"
oconn.open strconn
set getdataconnection = oconn
end function
%>
利用ado,我们可以很容易地将 asp 页面与 sql 数据库相连接。首先我们要创建一个到数据库的连接。为了获得记录集,我们要调用 connection 对象的execute方法,将希望执行的命令的文本字符串传入,一旦有了记录集,就可以在其中循环。header.asp 包含获得数据连接的函数,这意味着如果数据源有变化,我们只有一个位置需要编辑连接信息(服务器、用户和口令)。请注意,作为结果,我们必须在函数的末尾使用set命令传出新连接。
优化性能
asp使建立web页面变得十分容易,但如果想建立一个可以适应大量用户的站点,你就需要仔细考虑编码。下面笔者将为读者介绍增强基于web日历可伸缩性的几种方法,这些方法也可用于提高任何基于asp的web站点的性能。
1.sql优化
提高站点性能的一个简单方法是给 schedule表的date字段添加一个索引,这样,它会在给定日期之间进行查找,因而将加快 getevents的存储过程。
对于小型站点,我们可以将 sql 与 iis 安装在同一服务器上,一旦站点访问量开始增长,我们可将 sql 移动到其自身的服务器上,当访问量进一步增长时,我们可以添加均指向同一 sql 服务器的多个 iis 服务器。如果 sql 服务器的通信量过度增长时,还可以将数据分割到不同的服务器上,我们可以将奇数月份分配到一台服务器,将偶数月份分配到另一台服务器上,当然,这需要修改 header.asp 中的 getdataconnection,以便它为你提供基于此月份的正确连接。
2.asp 优化
asp 解释的主要优化方法将是利用高速缓存页面,以便无需每次读取都对它们进行解释。做到这一点的最简单的方法是借助 asp application 对象。要做到这一点,你只需将html保存到含有月份和年份名称的应用程序变量(例如 calendar07-2000)中。然后,当显示 event calendar 页时,你首先检查一下看看日历是否已经保存在应用程序变量中,如果是,则只需检索它,这种方式会大大加快网站的查询过程。下面的代码显示了这个工作过程:
<<do header>>
showcalendar(nmonth, nyear)
<<do footer>>
sub showcalendar(nmonth, nyear)
if application("calendar" && nmonth && "-" && nyear) = "" then
<<build calendar>>
application("calendar" && nmonth && "-" && nyear) = <<calendar>>
end if
response.write application("calendar" && nmonth && "-" && nyear)
end sub
当然,在 events.asp 页更改某个月份的事件时,你需要清空该月份的应用程序变量,以便反映这些事件的更改状况。
安全性
有几种方法可实现此站点上的安全性。对于 intranet 站点,基于windows nt的验证是最容易设置的,其原因是你的用户将很可能已经登录到网络。你可让所有用户查看 event calendar 页,但是只有管理员能访问add/remove events 页。
随着网络应用的发展,基于web的日历越来越受到人们的重视,对于显示诸如最后期限或日程安排之类的重要事件,或显示谁在什么时候休假,基于web的日历都是有用的。本文描述了如何使用iis和sql server内的asp建立一个非常简单的基于web的日历,并允许你与其他人共享你的日程表或管理一组人员的日历。
建立sql服务器端
对web日历而言,我们在服务器端仅需保存表明事件性质的一个文本字符串即可,字符串最长为100个字符。设计源代码如下:
calendar.sql
-- 创建表
create table schedule
(
idschedule smallint identity primary key,
dtdate smalldatetime not null,
vcevent varchar(100) not null
)
go
-- 存储过程
create procedure getschedule (@nmonth tinyint, @nyear smallint)
as
select idschedule, convert(varchar, datepart(dd, dtdate)) 'nday', vcevent
from schedule
where datepart(yy, dtdate) = @nyear and datepart(mm, dtdate) = @nmonth
order by datepart(dd, dtdate)
go
create procedure addevent (@vcdate varchar(20), @vcevent varchar(100))
as
insert schedule
select @vcdate, @vcevent
go
create procedure deleteevent (@idschedule smallint)
as
delete schedule where idschedule = @idschedule
go
设计asp客户端
下图是web日历的主要用户界面,用户可以看到哪些事件是已安排的。另外,使用底部的链接可以在日历中按月前后翻动。
asp的实现代码如下:
header.asp
<@ language="vbscript"
enablesessionstate = false %>
<%
' 目的:表头包括用来启动所有页的文件
' 还包括全局函数
option explicit
response.buffer = true
response.expires = 0
sub doheader(strtitle)
%>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>event calendar - <%= strtitle %></title>
</head>
<body bgcolor="white" link="blue" alink="blue" vlink="blue">
<basefont face="verdana, arial">
<center><h1>event calendar</h1>
<h3><%= strtitle %></h3>
<%
end sub
function getdataconnection()
dim oconn, strconn
set oconn = server.createobject("adodb.connection")
strconn = "provider=sqloledb; data source=adspm; initial catalog=teamweb; "
strconn = strconn && "user id=teamweb; password=x"
oconn.open strconn
set getdataconnection = oconn
end function
%>
利用ado,我们可以很容易地将 asp 页面与 sql 数据库相连接。首先我们要创建一个到数据库的连接。为了获得记录集,我们要调用 connection 对象的execute方法,将希望执行的命令的文本字符串传入,一旦有了记录集,就可以在其中循环。header.asp 包含获得数据连接的函数,这意味着如果数据源有变化,我们只有一个位置需要编辑连接信息(服务器、用户和口令)。请注意,作为结果,我们必须在函数的末尾使用set命令传出新连接。
优化性能
asp使建立web页面变得十分容易,但如果想建立一个可以适应大量用户的站点,你就需要仔细考虑编码。下面笔者将为读者介绍增强基于web日历可伸缩性的几种方法,这些方法也可用于提高任何基于asp的web站点的性能。
1.sql优化
提高站点性能的一个简单方法是给 schedule表的date字段添加一个索引,这样,它会在给定日期之间进行查找,因而将加快 getevents的存储过程。
对于小型站点,我们可以将 sql 与 iis 安装在同一服务器上,一旦站点访问量开始增长,我们可将 sql 移动到其自身的服务器上,当访问量进一步增长时,我们可以添加均指向同一 sql 服务器的多个 iis 服务器。如果 sql 服务器的通信量过度增长时,还可以将数据分割到不同的服务器上,我们可以将奇数月份分配到一台服务器,将偶数月份分配到另一台服务器上,当然,这需要修改 header.asp 中的 getdataconnection,以便它为你提供基于此月份的正确连接。
2.asp 优化
asp 解释的主要优化方法将是利用高速缓存页面,以便无需每次读取都对它们进行解释。做到这一点的最简单的方法是借助 asp application 对象。要做到这一点,你只需将html保存到含有月份和年份名称的应用程序变量(例如 calendar07-2000)中。然后,当显示 event calendar 页时,你首先检查一下看看日历是否已经保存在应用程序变量中,如果是,则只需检索它,这种方式会大大加快网站的查询过程。下面的代码显示了这个工作过程:
<<do header>>
showcalendar(nmonth, nyear)
<<do footer>>
sub showcalendar(nmonth, nyear)
if application("calendar" && nmonth && "-" && nyear) = "" then
<<build calendar>>
application("calendar" && nmonth && "-" && nyear) = <<calendar>>
end if
response.write application("calendar" && nmonth && "-" && nyear)
end sub
当然,在 events.asp 页更改某个月份的事件时,你需要清空该月份的应用程序变量,以便反映这些事件的更改状况。
安全性
有几种方法可实现此站点上的安全性。对于 intranet 站点,基于windows nt的验证是最容易设置的,其原因是你的用户将很可能已经登录到网络。你可让所有用户查看 event calendar 页,但是只有管理员能访问add/remove events 页。
上一篇: 创力采集程序用到的函数 推荐第1/3页
下一篇: 用XMLHTTP很好的一个例子