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

2021-04-12 21:27:09 字數 2881 閱讀 8133

本文介紹如何建立基於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 **allint identity primary key,

dtdate **alldatetime not null,

vcevent varchar(100) not null)go

-- 儲存過程

create procedure getschedule (@nmonth tinyint, @nyear **allint)

asselect 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)

gocreate procedure addevent (@vcdate varchar(20), @vcevent varchar(100))

asinsert schedule

select @vcdate, @vcevent

gocreate procedure deleteevent (@idschedule **allint)

asdelete 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)

%>

<%

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 優化

當然,在 events.asp 頁更改某個月份的事件時,你需要清空該月份的應用程式變數,以便反映這些事件的更改狀況。

安全性

有 幾種方法可實現此站點上的安全性。對於 intranet 站點,基於windows nt的驗證是最容易設定的,其原因是你的使用者將很可能已經登入到網路。你可讓所有使用者檢視 event calendar 頁,但是只有管理員能訪問add/remove events 頁。 

用ASP實現WEB頁面分使用者許可權的訪問

前幾日上網,看到有在電腦報論壇的asp版提出如下的問題 我試著用asp的方法為網頁設定了口令,但 是使用者只要知道下一步鏈結的檔名,就可以在位址列輸入該檔名而繞過口令檔案直接瀏覽該檔案。怎樣才能達到真 正加密的目的 如果不輸入口令 使用者名稱就無法瀏覽網頁?上面的問題,是在基於internet in...

用的ASP防SQL注入程式

sql注入被那些菜鳥級別的所謂黑客高手玩出了滋味,發現現在大部分黑客入侵都是基於sql注入實現的。sql注入被那些菜鳥級別的所謂黑客高手玩出了滋味,發現現在大部分黑客入侵都是基於sql注入實現的,哎,誰讓這個入門容易呢,好了,不說廢話了,現在我開始說如果編寫通用的sql防注入程式一般的http請求不...

用ASP建立WEB頁面計數器

用asp建立web頁面的計數器通常有兩種簡單的方法,乙個是建立global.asa,另外乙個是直接寫乙個asp檔案來進行計數。一般使用乙個文件來儲存瀏覽數量。1 用global.asa來寫計數器寫乙個global.asa檔案,存放到虛擬目錄的根目錄下面,源 如下 呼叫計數器時候在網頁中寫入即可,不過...