用ASP和SQL实现基于Web日历源码
来源:CSDN 发布时间:2010-04-24 15:52:00
本文介绍如何建立基于Web的日历,同时为不熟悉Active Server Pages(ASP)、SQL和ADO的开发者提供建立Web站点的过程介绍,也为有经验的开发者提供了Web站点可伸缩性方面的技巧。
随着网络应用的发展,基于Web的日历越来越受到人们的重视,对于显示诸如最后期限或日程安排之类的重要事件,或显示谁在什么时候休假,基于Web的日历都是有用的。本文描述了如何使用IIS和SQL Server内的ASP建立一个非常简单的基于Web的日历,并允许你与其他人共享你的日程表或管理一组人员的日历。
建立SQL服务器端
对Web日历而言,我们在服务器端仅需保存表明事件性质的一个文本字符串即可,字符串最长为100个字符。设计源代码如下:
-- 创建表
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
下图是Web日历的主要用户界面,用户可以看到哪些事件是已安排的。另外,使用底部的链接可以在日历中按月前后翻动。
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站点的性能。
提高站点性能的一个简单方法是给 Schedule表的date字段添加一个索引,这样,它会在给定日期之间进行查找,因而将加快 GetEvents的存储过程。
对于小型站点,我们可以将 SQL 与 IIS 安装在同一服务器上,一旦站点访问量开始增长,我们可将 SQL 移动到其自身的服务器上,当访问量进一步增长时,我们可以添加均指向同一 SQL 服务器的多个 IIS 服务器。如果 SQL 服务器的通信量过度增长时,还可以将数据分割到不同的服务器上,我们可以将奇数月份分配到一台服务器,将偶数月份分配到另一台服务器上,当然,这需要修改 header.asp 中的 GetDataConnection,以便它为你提供基于此月份的正确连接。
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 页。


猜你喜欢
- 一、函数list(1)定义:用打开的文件作为参数,把文件内的每一行内容作为一个元素(2)格式:list(文件)(3)例子:with open
- 今日使用 npm init webpack love 创建一个新项目,然后执行 npm run dev 之后项目报错,提示错误如下:没有给这
- 使用python完成超级基础的学生管理系统,供大家参考,具体内容如下说明:1、本学生管理系统非常非常简易,只有增,显,查,删,改功能,对于P
- 当浏览网页时,总有那么一类网站华丽而富有趣味性。在浏览信息的同时,足够让我们眼前一亮。它们在充分融入动画、视频、游戏、甚至是与众不同的交互操
- 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大大提升了工作效率。编程世界里有各种各样的
- 事情是这样的,笔者在使用docx库的时候遇到了文字的缩进问题,具体需求是:正文内容每段首行顶两格,也就是向右缩进两个字符,像这样:需求看似很
- 一、日期类型:对于SQL Server 2008 来说(因为2000甚至2005已经稍微有被淘汰的迹象,所以在此不作过多说明,加上自己工作使
- Python的for循环十分灵活,使用for循环我们可以很轻松地遍历一个列表,例如:a_list = ['z', '
- 语法:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name F
- 在源环境中启动CLion需要告知CLion ROS特定的环境变量。通过运行来源工作空间时,将在当前shell中检索这些变量source ./
- 一、io包中接口的好处和优势1.1拷贝数据的函数io.Copy(dst Writer, src Reader)io.CopyBuffer(d
- 本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选、掩膜的操作。本文所要实现的需求
- 目录背景分析数据模拟1、创建两个表:员工表和部门表2、创建两个函数:生成随机字符串和随机编号3、编写存储过程,模拟500W的员工数据4、编写
- 前言本博客重点内容:reportlab生成流文件格式、reportlab分页和图片流文件写入reportlab等。我讲一下我这个需求的来源,
- 1.元字符: . 它匹配除了换行字符外的任何字符,在 alternate 模式(re.DOTALL)下它甚至可以匹配换行 ^ 匹配行首。除非
- ASP 内建对象Active Server Pages 提供内建对象,这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用
- 模式库在模式库里,我将列出所有电子商务网站需要的模式.以下将罗列出经典常用的模式案例,我也试图让这些模式看起来更有趣味性与实用性。(Yaho
- SQL Server TEXT、NTEXT字段拆分的问题引用的内容:SET NOCOUNT ON CREATE 
- 写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储、处理方便,但是
- 参考Stack Overflow Python: How to query multiple selected items in