金 晶
WWW是目前Internet上發(fā)展最快的領(lǐng)域,也是Inernet網(wǎng)上最重要的信息檢索手段。早期的WEB頁(yè)面主要是用來傳遞靜態(tài)的HTML文檔,后來由于CGI接口、VBScript和JavaScript語(yǔ)言的引入,特別是近幾年發(fā)展起來的ASP技術(shù),使得WEB頁(yè)面可以方便傳播動(dòng)態(tài)信息。借助ASP技術(shù),可以設(shè)計(jì)出具有聲音、動(dòng)畫、圖形、圖像和各種特殊效果的WEB頁(yè)面,以及方便的訪問數(shù)據(jù)庫(kù)。
一、ASP技術(shù)
1.ASP工作原理
ASP,是Active Server Pages的縮寫,即“服務(wù)器端動(dòng)態(tài)網(wǎng)頁(yè)”。它是基于WEB的一種編程技術(shù),能夠把HTML文件、腳本命令以及COM組件組合在一起,形成一個(gè)能夠在服務(wù)器端運(yùn)行的動(dòng)態(tài)WEB應(yīng)用程序,并能夠按照用戶的要求制作出標(biāo)準(zhǔn)的HTML頁(yè)面?zhèn)鬟f給客戶端瀏覽器。
有了ASP,就不必?fù)?dān)心用戶的瀏覽器是否能夠讀懂動(dòng)態(tài)網(wǎng)頁(yè)中所編寫的代碼,因?yàn)樗械某绦蚨荚诜?wù)器端執(zhí)行。當(dāng)程序執(zhí)行完畢后,服務(wù)器端執(zhí)行的結(jié)果返回給客戶端瀏覽器,這樣就減輕了客戶端瀏覽器的負(fù)擔(dān),大大提高了交互的速度。
2.ASP的運(yùn)行環(huán)境
目前,ASP可運(yùn)行在以下三種環(huán)境:Windows NT(2000 Server)+IIS4.0(Internet Information Server)以上;Windows NT workstation +Peer Web Server;Windows95/98+PWS(Personal Web Server)。
3.ASP文件的建立
ASP的程序代碼簡(jiǎn)單、通用,文件名由.asp結(jié)尾,通常由四個(gè)部分構(gòu)成:標(biāo)準(zhǔn)的HTML標(biāo)記;ASP語(yǔ)法命令:位于<%%>之間;服務(wù)器端的include語(yǔ)句;腳本語(yǔ)言。
4.ASP的內(nèi)置對(duì)象
在面向?qū)ο缶幊讨?對(duì)象是具有屬性(數(shù)據(jù))和方法(行為方式)的實(shí)體。ASP中提供了六個(gè)內(nèi)置對(duì)象供用戶直接調(diào)用,它們分別是:Application對(duì)象,控制服務(wù)器端應(yīng)用程序的啟動(dòng)和終止?fàn)顟B(tài),并保存整個(gè)應(yīng)用程序過程中的信息;Request對(duì)象,從用戶端獲取信息傳遞給服務(wù)器,它是ASP讀取用戶輸入的主要方法;Response對(duì)象,服務(wù)器將輸出的內(nèi)容發(fā)送到客戶端;Server對(duì)象,提供服務(wù)器的方法和屬性;Session對(duì)象,存儲(chǔ)特定的用戶會(huì)話所需的信息;Object Context對(duì)象,配合服務(wù)器進(jìn)行分布事務(wù)處理。
二、ASP中的數(shù)據(jù)庫(kù)訪問
在ASP中,利用ADO(ActiveX Data Objects)可以方便地訪問數(shù)據(jù)庫(kù),很好地對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理。筆者通過一個(gè)實(shí)例,具體闡述ASP利用ADO訪問數(shù)據(jù)庫(kù)的過程。在該實(shí)例中,用戶希望通過網(wǎng)頁(yè)能夠訪問服務(wù)器中的teacher數(shù)據(jù)庫(kù)中的Information數(shù)據(jù)表,然后將該表中的所有數(shù)據(jù)顯示在返回表格中,具體步驟如下:
1.定義數(shù)據(jù)源
在WEB服務(wù)器上,打開“控制面板”,選中“ODBC”,在“系統(tǒng)DSN”下選“添加”,選定數(shù)據(jù)庫(kù)種類、名稱、位置等。該實(shí)例數(shù)據(jù)庫(kù)種類是“SQL Server”,名稱是teacher。
2.創(chuàng)建ADO的對(duì)象
ASP技術(shù)中的ADO對(duì)象組件作為用戶快速訪問數(shù)據(jù)庫(kù)的最簡(jiǎn)便方式,只要使用ADO中的兩個(gè)最基本的對(duì)象Connection和Recordset對(duì)象,就能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問。具體來說,Connection對(duì)象的功能是建立和特定數(shù)據(jù)庫(kù)的連接,而Recordset對(duì)象的功能則是取得從該數(shù)據(jù)庫(kù)中返回的查詢數(shù)據(jù)。首先,應(yīng)為Connection和Recordset對(duì)象創(chuàng)建各自的對(duì)象實(shí)例:
<%SetConn=Server.CreateObject(”ADODB.Connection”)%>
<%SetRS=Server.CreateObject(”ADODB.Recordset”)%>
其中,RS和Conn分別是對(duì)象實(shí)例名稱,用戶可以自行定義。這樣就成功地創(chuàng)建了兩個(gè)空的Connection和Recordset對(duì)象。
3.建立與數(shù)據(jù)庫(kù)的連接
使用Connection對(duì)象的Open方法建立與特定數(shù)據(jù)庫(kù)的連接,Connection對(duì)象的Open方法有3個(gè)參數(shù)選項(xiàng),分別為目標(biāo)數(shù)據(jù)庫(kù)的名稱、登錄用戶名和口令,語(yǔ)法為ConnOpenConnectionString,UserID,Password。其中,ConnectionString參數(shù)表示與數(shù)據(jù)源建立的相關(guān)信息,如果用戶已經(jīng)成功建立了該數(shù)據(jù)庫(kù)的DNS,就可以直接的使用該DNS。另外兩個(gè)參數(shù)登錄用戶名和口令為可選項(xiàng),如果用戶在建立數(shù)據(jù)連接的DNS時(shí)已經(jīng)設(shè)定了登錄用戶名和口令,就可以省略這兩個(gè)參數(shù)項(xiàng)。在此,用戶使用Connection對(duì)象的Open方法與teacher數(shù)據(jù)庫(kù)建立連接,具體形式為<% Conn.Open “teacher”%>。
4.使用Recrodset對(duì)象獲取數(shù)據(jù)
用戶希望取得teacher數(shù)據(jù)庫(kù)中Information數(shù)據(jù)表中的所有數(shù)據(jù),因此使用最簡(jiǎn)單的“Select * From Information”即可。為了使代碼更直觀,容易修改和維護(hù),建議用戶將上述的SQL語(yǔ)句用某個(gè)變量代替。具體為
<% SQL=”Select * From Information”%>
其中,SQL為變量名,用戶可以自行定義,然后使用Connection對(duì)象中的Execute方法執(zhí)行該SQL語(yǔ)句,并將結(jié)果輸入到Recordset對(duì)象中,具體為:
<% SetRS=Conn.Execute(SQL)%>
至此,ADO從數(shù)據(jù)庫(kù)中查詢到的所有數(shù)據(jù)被保存到Recordset對(duì)象中。
5.檢驗(yàn)Recordset對(duì)象是否為空
在對(duì)Recordset對(duì)象中的數(shù)據(jù)進(jìn)行進(jìn)一步處理之前,建議用戶最好驗(yàn)證一下是否確實(shí)將查詢結(jié)果數(shù)據(jù)保存到了Recordset對(duì)象中。用戶可以使用Recordset對(duì)象的BOF和EOF屬性實(shí)現(xiàn)驗(yàn)證功能。BOF如果為真則代表數(shù)據(jù)指正位于首行數(shù)據(jù)之前,如果EOF為真則代表為數(shù)據(jù)指正位于末行數(shù)據(jù)之后,如果兩者皆為真,則說明Recordset對(duì)象為空。具體代碼為:
<% if (RS.EOF and RS.BOF) then
response.write “NO records found”
end if %>
6.處理Recordset對(duì)象數(shù)據(jù)
在驗(yàn)證Recordset對(duì)象中確實(shí)含有查詢返回?cái)?shù)據(jù)之后,用戶就可以按照自己的需要對(duì)數(shù)據(jù)進(jìn)行響應(yīng)的處理。通常較為常用的Recordset命令為:
Recordset.Fields.Count:Recordset對(duì)象的列數(shù);
Recordset(I).Name:第I列名稱,I由0到Recordset.Fields.Count-1;
Recordset(I)第I列數(shù)據(jù),I由0到Recordset.Fields.Count-1;
Recordset(“列名稱”):讀取指定列的數(shù)據(jù);
Recordset.MoveNext:數(shù)據(jù)指針下移一行;
Recordset.MovePrev:數(shù)據(jù)指針上移一行;
Recordset.MoveFirst:數(shù)據(jù)指針移到第一行;
Recrodset.MoveLast:數(shù)據(jù)指針移到最末一行。
接下來的問題是如何將Recordset對(duì)象中的數(shù)據(jù)顯示出來。如果用戶希望以表格的形式顯示數(shù)據(jù),則首先需要ASP頁(yè)面中建立表格標(biāo)簽:
<% =RS(I).Name %> |
<% =RS(I)%> |