用ASP和SQL實現基於Web的事件日曆

來源:互聯網
上載者:User

本文介紹如何建立基於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 頁。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.