ASP技術
  當前位置:首頁 > 技術支持 > ASP技術
用(yòng)ASP和(hé)SQL實現基于Web的(de)事件日曆
發布時(shí)間:2005-04-14 浏覽:3014次
    

本文介紹如何建立基于Web的(de)日曆,同時(shí)爲不熟悉Active Server Pages(ASP)、SQL和(hé)ADO的(de)開發者提供建立Web站點的(de)過程介紹,也(yě)爲有經驗的(de)開發者提供了(le)Web站點可(kě)伸縮性方面的(de)技巧。
随著(zhe)網絡應用(yòng)的(de)發展,基于Web的(de)日曆越來(lái)越受到人(rén)們的(de)重視,對(duì)于顯示諸如最後期限或日程安排之類的(de)重要事件,或顯示誰在什(shén)麽時(shí)候休假,基于Web的(de)日曆都是有用(yòng)的(de)。本文描述了(le)如何使用(yòng)IIS和(hé)SQL Server内的(de)ASP建立一個(gè)非常簡單的(de)基于Web的(de)日曆,并允許你與其他(tā)人(rén)共享你的(de)日程表或管理(lǐ)一組人(rén)員(yuán)的(de)日曆。


建立SQL服務器端
對(duì)Web日曆而言,我們在服務器端僅需保存表明(míng)事件性質的(de)一個(gè)文本字符串即可(kě),字符串最長(cháng)爲100個(gè)字符。設計源代碼如下(xià):
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客戶端
下(xià)圖是Web日曆的(de)主要用(yòng)戶界面,用(yòng)戶可(kě)以看到哪些事件是已安排的(de)。另外,使用(yòng)底部的(de)鏈接可(kě)以在日曆中按月(yuè)前後翻動。
ASP的(de)實現代碼如下(xià):
header.asp
<@ LANGUAGE="VBSCRIPT"
ENABLESESSIONSTATE = False %>
<%
" 目的(de):表頭包括用(yòng)來(lái)啓動所有頁的(de)文件
" 還(hái)包括全局函數
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
%>


利用(yòng)ADO,我們可(kě)以很容易地将 ASP 頁面與 SQL 數據庫相連接。首先我們要創建一個(gè)到數據庫的(de)連接。爲了(le)獲得(de)記錄集,我們要調用(yòng) Connection 對(duì)象的(de) Execute 方法,将希望執行的(de)命令的(de)文本字符串傳入,一旦有了(le)記錄集,就可(kě)以在其中循環。header.asp 包含獲得(de)數據連接的(de)函數,這(zhè)意味著(zhe)如果數據源有變化(huà),我們隻有一個(gè)位置需要編輯連接信息(服務器、用(yòng)戶和(hé)口令)。請注意,作爲結果,我們必須在函數的(de)末尾使用(yòng) set 命令傳出新連接。
優化(huà)性能
ASP使建立Web頁面變得(de)十分(fēn)容易,但如果想建立一個(gè)可(kě)以适應大(dà)量用(yòng)戶的(de)站點,你就需要仔細考慮編碼。下(xià)面筆者将爲讀者介紹增強基于Web日曆可(kě)伸縮性的(de)幾種方法,這(zhè)些方法也(yě)可(kě)用(yòng)于提高(gāo)任何基于ASP的(de)Web站點的(de)性能。
1.SQL優化(huà)
提高(gāo)站點性能的(de)一個(gè)簡單方法是給 Schedule表的(de)date字段添加一個(gè)索引,這(zhè)樣,它會在給定日期之間進行查找,因而将加快(kuài) GetEvents的(de)存儲過程。
對(duì)于小型站點,我們可(kě)以将 SQL 與 IIS 安裝在同一服務器上,一旦站點訪問量開始增長(cháng),我們可(kě)将 SQL 移動到其自身的(de)服務器上,當訪問量進一步增長(cháng)時(shí),我們可(kě)以添加均指向同一 SQL 服務器的(de)多(duō)個(gè) IIS 服務器。如果 SQL 服務器的(de)通(tōng)信量過度增長(cháng)時(shí),還(hái)可(kě)以将數據分(fēn)割到不同的(de)服務器? ?,我們可(kě)以将奇數月(yuè)份分(fēn)配到一台服務器,将偶數月(yuè)份分(fēn)配到另一台服務器上,當然,這(zhè)需要修改 header.asp 中的(de) GetDataConnection,以便它爲你提供基于此月(yuè)份的(de)正确連接。
2.ASP 優化(huà)
ASP 解釋的(de)主要優化(huà)方法将是利用(yòng)高(gāo)速緩存頁面,以便無需每次讀取都對(duì)它們進行解釋。做(zuò)到這(zhè)一點的(de)最簡單的(de)方法是借助 ASP Application 對(duì)象。要做(zuò)到這(zhè)一點,你隻需将HTML保存到含有月(yuè)份和(hé)年份名稱的(de)應用(yòng)程序變量(例如 Calendar07-2000)中。然後,當顯示 Event Calendar 頁時(shí),你首先檢查一下(xià)看看日曆是否已經保存在應用(yòng)程序變量中,如果是,則隻需檢索它,這(zhè)種方式會大(dà)大(dà)加快(kuài)網站的(de)查詢過程。下(xià)面的(de)代碼顯示了(le)這(zhè)個(gè)工作過程:
<<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
當然,在 Even ts.asp 頁更改某個(gè)月(yuè)份的(de)事件時(shí),你需要清空該月(yuè)份的(de)應用(yòng)程序變量,以便反映這(zhè)些事件的(de)更改狀況。
安全性
有幾種方法可(kě)實現此站點上的(de)安全性。對(duì)于 Intranet 站點,基于Windows NT的(de)驗證是最容易設置的(de),其原因是你的(de)用(yòng)戶将很可(kě)能已經登錄到網絡。你可(kě)讓所有用(yòng)戶查看 Event Calendar 頁,但是隻有管理(lǐ)員(yuán)能訪問Add/Remove Events 頁。
如果關心審計,你可(kě)以容易地修改 AddEvent 和(hé) DeleteEvent 過程将其信息保存到審計表中。你還(hái)可(kě)以确保 IIS 爲每個(gè)頁命中的(de)查詢字符串和(hé)用(yòng)戶進行日志記錄,然後逐個(gè)分(fēn)析日志以确定何人(rén)于何時(shí)做(zuò)了(le)什(shén)麽,這(zhè)是非常簡單的(de)。

 
 
    
 
 
版權所有 © 2005-2024 安徽問法信息技術有限公司  
地址:安徽省合肥市蜀山區(qū)望江西路69号西湖國際廣場(chǎng) 電話(huà):0551-64935878 郵箱:admin@ajsoft.cn