用ASP和SQL实现基于Web的事件日历

原创 2004年10月27日 13:26:00
用ASP和SQL实现基于Web的事件日历
 
<?XML:NAMESPACE PREFIX = SITEMANAGER-CMS_INCLUDE />本文介绍如何建立基于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 页。

如果关心审计,你可以容易地修改 AddEvent 和 DeleteEvent 过程将其信息保存到审计表中。你还可以确保 IIS 为每个页命中的查询字符串和用户进行日志记录,然后逐个分析日志以确定何人于何时做了什么,这是非常简单的。

本文演示了建立基于 Web 日历的基本过程,该程序虽然简单,但是可以很容易地将其扩展为功能完备的站点。限于篇幅,笔者不再深入介绍,感兴趣的读者可到InfoCD第八期光盘中找到具体实现步骤。

asp.net Ajax--Calendar控件使用

Calendar控件是一个很简单的控件,主要用来在页面中提供日历的选择,其实现在已经有很多用javascript写的日历控件,但是Canlendar日历控件能够让我们更快速地来实现这种效果,只需要进行...
  • mhkbluesky
  • mhkbluesky
  • 2007年12月03日 17:07
  • 779

Java Calendar类简单应用:实现可视化日历

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import ja...
  • u010078400
  • u010078400
  • 2014年05月07日 20:54
  • 2371

利用JS实现Web日历控件(包括日期和时间)

1.由于项目需要,需要一个精确到分钟的日历控件,具体如下图所示。 2.具体包括WebCalendar.js和一个schedule.jsp两个文件,源码如下。 (1)WebCalendar.js v...
  • Hadas_Wang
  • Hadas_Wang
  • 2016年05月24日 16:19
  • 7431

关于用js实现的日历记事功能

博主是个java新手,目前在做的一个项目就是考勤排班系统,主要负责的模块是排班模块这一方面。需求上面要求要在显示当月的日历表,日历表上同时动态生成上班时间、下班时间、是否值班、值班类型等功能。 当时...
  • nb7474
  • nb7474
  • 2017年12月26日 14:10
  • 169

【简单Web服务器搭建】基于Socket实现的最简单的Web服务器【ASP.NET原理分析】

转自:http://www.cnblogs.com/DebugLZQ/archive/2011/12/06/2278234.html       通常,我们借助浏览器(通常是IE,FireFox或者...
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2015年08月30日 17:39
  • 863

利用SQLSERVER存储过程实现ASP用户身份验证

在我们编写用户身份验证程序中,很容易用ASP调用SQL语句来检索数据表中是否有条件相符的记录,然后再用ASP进行相关处理。   条条道路通罗马!当然,我们也可以用SQL SERVER数据库的存储过程来...
  • Tony088
  • Tony088
  • 2007年11月21日 11:39
  • 309

[ASP开发]在Web项目中多维下拉菜单的实现技巧和方法

(http://zhengyaohua.blogchina.com/blog/1084250.html)【摘要】对于web项目中下拉菜单的设计,尤其涉及到复杂的多维菜单,许多web开发的入门者往往不知...
  • chnechen
  • chnechen
  • 2005年04月30日 17:21
  • 2061

用gridview模仿日历并实现签到功能

最近 公司没事,闲得慌……(项目开发完了,是不是 都这样……^_^ 23333) 第一次写博客  大神勿喷 只针对 刚出生的猿猴们  谢谢。。。 前段时间公司要求在app上添加一个签到功能,也就是 ...
  • YYgool
  • YYgool
  • 2016年01月06日 15:12
  • 1085

介绍安卓中对日历事件的增删查改

介绍安卓中对日历事件的增删查改    前几个月在做项目时有需求要将自己APK的应用同步到手机系统日历中,于是当时就查看了一些文章对手机系统日历的操作有些研究,虽然网上对日历操作的文章很多,但是自己写...
  • justforhappness
  • justforhappness
  • 2014年10月24日 20:24
  • 2419

精挑细选的10个jQuery日历插件

在本文中,小编为大家整理了10个非常有用的jQuery日历插件,为你的网站添加非常t适用的日历功能。 CLNDR.js CLNDR.js是一个可创建日历的jQuery插件,支持自定义。该插件不会生...
  • BTfan123
  • BTfan123
  • 2014年03月06日 10:24
  • 4094
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用ASP和SQL实现基于Web的事件日历
举报原因:
原因补充:

(最多只允许输入30个字)