ASP技(jì)術(shù)
  當前位置:首頁 > 技(jì)術(shù)支持 > ASP技(jì)術(shù)
用(yòng)ASP和(hé)SQL實現(xià♦®n)基于Web的(de)事(shì)件(jiàn)日(rì)曆
發布時(shí)間(jiān):2005-04-14 浏覽:3197次
    

本文(wén)介紹如(rú)何建立基于Web的(de)§σ 日(rì)曆,同時(shí)為(wèi)不(bù)熟‍€←σ悉Active Server Pages(ASP)、SQL和(hé)≈÷≠€ADO的(de)開(kāi)發者提供建立Web站(zhàn)點的(d♣÷e)過程介紹,也(yě)為(wèi)有(yǒu)經驗的(de)開(kāi)™π發者提供了(le)Web站(zhàn)點可( ∞kě)伸縮性方面的(de)技(jì)巧。
随著(zhe)網絡應用(yòng)的(de♦&)發展,基于Web的(de)日(rì)曆越來✘₹ ₽(lái)越受到(dào)人(rén)們的(de)重視(sh&≠ì),對(duì)于顯示諸如(rú)最後期限或日(rì)程安排之類 ↔₽的(de)重要(yào)事(shì)件(>€™jiàn),或顯示誰在什(shén)麽時(s÷♦hí)候休假,基于Web的(de)日(rì)曆都(dōu)是(sh→< ≠ì)有(yǒu)用(yòng)的(de)。本文(wén)描述•π•&了(le)如(rú)何使用(yòng)IIS和(hé)S&​QL Server內(nèi)的(de)ASP建♣‍¥立一(yī)個(gè)非常簡單的(de)基于Web的(de)日(rì)α♠®曆,并允許你(nǐ)與其他(tā)人(rén∞☆)共享你(nǐ)的(de)日(rì)程表或管理(lǐ∞↓)一(yī)組人(rén)員(yuán)的(de)日(rì)曆。


建立SQL服務器(qì)端
對(duì)Web日(rì)曆而言,我們在服務£±₽器(qì)端僅需保存表明(míng)事(shì)>♣件(jiàn)性質的(de)一(yī)個(gè)文(wén)本字符串即∞≤¶可(kě),字符串最長(cháng)為(wèi)1★π00個(gè)字符。設計(jì)源代碼如(rú)下(xià):
Calendar.sql
-- 創建表
create table Schedule
(
idSchedule smallint identity primarσ♣±y key,
dtDate smalldatetime₽ ≤ not null,
vcEvent varchar(100) 'γnot null
)
go
-- 存儲過程
create procedure GetSchedule (@nMonth ↔λ≠ tinyint, @nYear smallint)
as
select idSchedule, convert(var&∞★®char, datepart(dd, dtDate)) "nDay", v‌✘πcEvent
from Schedule
where datepart(yy, d€βΩ★tDate) = @nYear and d∏Ωδ‌atepart(mm, dtDate) = @≤÷©nMonth
order by datepart(dd, dtDate)
go
create procedure AddEvent (@vcDate va≠≠rchar(20), @vcEvent varchar(100))
as
insert Schedule
select @vcDate, @vcEventε &
go
create procedure DeleteEvent (@i✘ dSchedule smallint)
as
delete Schedule where idSc•↓÷≠hedule = @idSchedule
go


設計(jì)ASP客戶端
下(xià)圖是(shì)Web日(rì)曆的(de)主≤​₩♥要(yào)用(yòng)戶界面,用(yòn→→™★g)戶可(kě)以看(kàn)到(dào)哪些(xiē)事(shì)件(γ$★jiàn)是(shì)已安排的(de)。另¥ δ→外(wài),使用(yòng)底部的(de)鏈接可(kě)以在日(rì✘±)曆中按月(yuè)前後翻動。
ASP的(de)實現(xiàn)代碼如(rú)≠ π♥下(xià):
header.asp
<@ LANGUAGE="VBSCRIPT"
ENABLESESSIONSTATE = Fals÷↕≠<e %>
<%
" 目的(de):表頭包括用(yòng)來(lái)啓動所有₽φ☆(yǒu)頁的(de)文(wén)件(jiàn)
" 還(hái)包括全局函數(shù)
Option Explicit
Response.Buffer = True
Response.Expires = 0
sub Doheader(strTitle)
%>
<html>
   <head>
   <META HTTP-EQUIV="Content-Type" CO​✔§©NTENT="text/html; ch✔"arset=gb2312">
   <title>Event Calendar​$$‍ - <%= strTitle %></£↓§ title>
   </head>
   <body bgcolor="white" link="blue" a↕$γ‌link="blue" vlink="blue">
   <basefont face="Verdana, ®¥✔Arial">
   <center><h1>Event Cal↓ endar</h1>
   <h3><%= strTitle %></h3>
<%
end sub
function GetDataConnection()
dim oConn, strConn
Set oConn = Server.CreateObject("Aβ₹DODB.Connection")
strConn = "Provider=SQσ‍±↑LOLEDB; Data Source=adspm; Ini₩®tial Catalog=TeamWeb; "
strConn = strConn & &amγ↑p; "User Id=TeamWeb; Password=x"
oConn.Open strConn
set GetDataConnection = oConδ<←n
end function
%>


利用(yòng)ADO,我們可(kě)以£β✔很(hěn)容易地(dì)将 ASP 頁面與 SQL 數(shù)據庫≈✔相(xiàng)連接。首先我們要(yào)創建一(yī)個(gè)到(☆♥λ€dào)數(shù)據庫的(de)連接。為(wè$↓i)了(le)獲得(de)記錄集,我們要(yào)調用(yònγ<÷g) Connection 對(duì)象的(de) Execute 方法,δ¶ <将希望執行(xíng)的(de)命令的(de)文♠∞(wén)本字符串傳入,一(yī)旦有(yǒu)了(le)記錄集,¥α✘​就(jiù)可(kě)以在其中循環。header.as™↓π®p 包含獲得(de)數(shù)據連接的(de)函數(shù>©≤),這(zhè)意味著(zhe)如(rú)果數(sδ ₽σhù)據源有(yǒu)變化(huà),我們隻有(yǒu)一(yī)個(g₽‍αè)位置需要(yào)編輯連接信息(服務器(qì)、用(≥β‌yòng)戶和(hé)口令)。請(qǐng)注意,作(zuò)為≈♣₩©(wèi)結果,我們必須在函數(shù)的(de)末尾使用(yòng) set ♣α 命令傳出新連接。
優化(huà)性能(néng)
ASP使建立Web頁面變得(de)十分(fē<±≤n)容易,但(dàn)如(rú)果想建立一(yī)個(gè)可(kě)以适應大​δ(dà)量用(yòng)戶的(de)站(zhàn)≤ 點,你(nǐ)就(jiù)需要(yào)仔細考慮編碼。下(↓‍↕®xià)面筆(bǐ)者将為(wèi)讀(d✘→∞§ú)者介紹增強基于Web日(rì)曆可(kěα®)伸縮性的(de)幾種方法,這(zhè)些(xiē)方法也(yě)可(kě)用®←÷(yòng)于提高(gāo)任何基于ASP的(de)↔♦♠∞Web站(zhàn)點的(de)性能(néng)。
1.SQL優化(huà)
提高(gāo)站(zhàn)點性能(néng)的(de)一(yī)個(gè÷±§)簡單方法是(shì)給 Schedule表的(de)date字♥♥段添加一(yī)個(gè)索引,這(zhè)樣,它§• 會(huì)在給定日(rì)期之間(jiān)進行(xíng)查找,因而将加‍₩π快(kuài) GetEvents的(de)存儲過程。
對(duì)于小(xiǎo)型站(zhàn)點φ★☆ε,我們可(kě)以将 SQL 與 IIS 安裝♦‍在同一(yī)服務器(qì)上(shàng),一(yī)旦站(zhà↓λ>n)點訪問(wèn)量開(kāi)始增長(α♥cháng),我們可(kě)将 SQL 移動到(dào)其自(™♦¶≤zì)身(shēn)的(de)服務器(qì)上(shàng'σ),當訪問(wèn)量進一(yī)步增長(ch∞δσ✔áng)時(shí),我們可(kě)以添加均‍©∑¥指向同一(yī) SQL 服務器(qì)的(de)多(duōα≈'>)個(gè) IIS 服務器(qì)。如(r €‍↓ú)果 SQL 服務器(qì)的(de)通‍££(tōng)信量過度增長(cháng)時(shí)¶δ,還(hái)可(kě)以将數(shù)據分(fēn)割到(dào)不(bù)§φ同的(de)服務器(qì)? ?,我們可(kě)以将奇數(shù)月(y£♣uè)份分(fēn)配到(dào)一(yī)台服務器(q↔™​ì),将偶數(shù)月(yuè)份分(fēn)配到(€ dào)另一(yī)台服務器(qì)上(shàng),當然,φ★這(zhè)需要(yào)修改 header.asp 中的(de) GetDa★ ¶<taConnection,以便它為(wèi)你(nǐ)提供基于此月↕♥(yuè)份的(de)正确連接。
2.ASP 優化(huà)
ASP 解釋的(de)主要(yào)優化(huà)方法将是(shì)利用(yò‌¥ng)高(gāo)速緩存頁面,以便無需每次讀(dú)取都(dōu)對λ•×(duì)它們進行(xíng)解釋。做(zuò)到(dào)這‌λβ(zhè)一(yī)點的(de)最簡單的(de)方法是(shì)借$↑助 ASP Application 對(duì)象。要(yào)做(€Ω♦ zuò)到(dào)這(zhè)一(yī)點,你↓™↕(nǐ)隻需将HTML保存到(dào)含有(yǒu)月(yuè)份和(h≈✔≠‍é)年(nián)份名稱的(de)應用(♦≈☆±yòng)程序變量(例如(rú) Calendar07-2000)₹±→中。然後,當顯示 Event Calendar 頁時(s€₩σhí),你(nǐ)首先檢查一(yī)下(x♥$ià)看(kàn)看(kàn)日(rì)曆是©®(shì)否已經保存在應用(yòng)程序變↔≈→φ量中,如(rú)果是(shì),則隻需檢索它,這(zhè)種方式會(huì)大$×↓(dà)大(dà)加快(kuài)網站(zhàn)的(de)§σ查詢過程。下(xià)面的(de)代碼顯示了(le)這₩→ε(zhè)個(gè)工(gōng)作(zuò)過程:
<<do header>>
ShowCalendar(nMonth, nYe‍&α​ar)
<<do Footer>>
sub ShowCalendar(nMont↔✘₩♠h, nYear)
if Application("Calenda∞÷ ™r" && nMonth && "-" &am✔≈★₩p;& nYear) = "" then
<<Build Calendar>>
Application("Calendar" && $≠☆δnMonth && "-" && nYea→™r) = <<Calendar>>
End if
Response.Write Applica☆✔tion("Calendar" && n✘↑≠∞Month && "-" ±"&& nYear)
End sub
當然,在 Even ts.asp 頁更改某個(gè)月(λΩ$yuè)份的(de)事(shì)件(jiàn)時(shí),<¥₽你(nǐ)需要(yào)清空(kōng)該月(yuè)份的✘♣(de)應用(yòng)程序變量,以便反映這(zε↔♥hè)些(xiē)事(shì)件(jiàn)的(de)更改狀況。
安全性
有(yǒu)幾種方法可(kě)實現(xi¶≤àn)此站(zhàn)點上(shàng)的(de)安全性。對(duì)于 In•↑tranet 站(zhàn)點,基于WiΩ≤ndows NT的(de)驗證是(shì)最容易設置的(de),其原©€φ 因是(shì)你(nǐ)的(de)用(yòng)戶将很(hěn)★≤>‍可(kě)能(néng)已經登錄到(dào)網絡。你(nǐ)可(kě≥€↑≥)讓所有(yǒu)用(yòng)戶查看(kàn) Event Cale∑₹ndar 頁,但(dàn)是(shì)隻有(yǒu)管理↑¥£(lǐ)員(yuán)能(néng)訪問(wèn)A₹€dd/Remove Events 頁。
如(rú)果關心審計(jì),你(nǐ)可(kě)以容易地(dì§§™)修改 AddEvent 和(hé) De±€λφleteEvent 過程将其信息保存到(dào)審計(jì✘σ)表中。你(nǐ)還(hái)可(kě)以确保 Ω♦≠IIS 為(wèi)每個(gè)頁命中的(de)查♣£₩↑詢字符串和(hé)用(yòng)戶進行(xíng)日(rì)志(zh✔$↓ì)記錄,然後逐個(gè)分(fēn)析日(rì)志(zhì↔↔)以确定何人(rén)于何時(shí)做₩ ∞(zuò)了(le)什(shén)麽,這(zhè)是(shì)非γε常簡單的(de)。

 
 
    
 
 
版權所有(yǒu) © 2005-₹₩φ©2024 南昌億雲信息技術有限公司 京ICP證000000号  皖公網安備 34019202000659号
地(dì)址:安徽省合肥市(shì)蜀山(shān)區(qū)望江西₩±∑(xī)路(lù)69号西(xī)湖(h$‍ú)國(guó)際廣場(chǎng) 電(diàn)話(huà):0551-64935↑ ↔×878 郵箱:admin@ajsoft.cn