ASP技術訪問WEB資料庫
一. 訪問WEB資料庫的多種方案
目前在WINDOWS環境下有多種訪問WEB資料庫的技術,主要有:
1.公用網關介面CGI(Common Gateway Interface)
CGI是較早實現的技術。適用於多種伺服器平台,如UNIX、WINDOWS等,但CGI的開發成本高、維護困難、功能有限、不具備交易處理功能、佔用伺服器資源較多。
2. INTERNET資料庫連接器IDC(Internet Database Connector)
IDC整合在ISAPI(Internet Server API)中,充分利用了DLL技術,易擴充,但編程較CGI更為複雜,只適用於小型資料庫系統。
3. 先進資料庫連接器ADC(Advance Database Connector)
ADC提供了ActiveX Control來訪問資料庫,它的主要特點是資料查詢由使用者端瀏覽器執行,因而需將伺服器端資料庫中的部分記錄下載到使用者端,系統開銷較大、響應慢,只適用於特別頻繁的資料庫查詢操作。
4. JAVA/JDBC語言編程
JAVA語言是一種物件導向、易移植、多線程式控制制的語言,可通過JDBC去串連資料庫。用JAVA/JDBC編寫的軟體可移植性強,適用於多種作業系統,但其執行效率和執行速度還不理想,目前無法建立高效、高速的應用。
5. 動態伺服器頁面ASP(Active Server Page)
ASP是微軟公司最新推出的WEB應用開發技術,著重於處理動態網頁和WEB資料庫的開發,編程靈活、簡潔,具有較高的效能,是目前訪問WEB資料庫的最佳選擇。
二. ASP簡介
1.ASP訪問資料庫的原理
ASP是伺服器端的指令碼執行環境,可用來產生和執行動態高效能的WEB伺服器程式。
當使用者使用瀏覽器請求ASP首頁時,WEB伺服器響應,調用ASP引擎來執行ASP檔案,並解釋其中的指令碼語言(JScript 或VBScript),通過ODBC串連資料庫,由資料庫訪問組件ADO(ActiveX Data Objects)完成資料庫操作,最後ASP產生包含有資料查詢結果的HTML首頁返回使用者端顯示。
由於ASP在伺服器端運行,運行結果以HTML首頁形式返回使用者瀏覽器,因而ASP來源程式不會泄密,增加了系統的安全保密性。此外,ASP是物件導向的指令碼環境,使用者可自行增加ActiveX組件來擴充其功能,拓展應用範圍。
2.ASP頁面的結構:
ASP的程式碼簡單、通用,檔案名稱由.asp結尾,ASP檔案通常由四部分構成:
1) 標準的HTML標記:所有的HTML標記均可使用。
2) ASP文法命令:位於<% %> 標籤內的ASP代碼。
3) 伺服器端的include語句:可用#include語句調入其它ASP代碼,增強了編程的靈活性。
4) 指令碼語言:ASP內建JScript和VBScript兩種指令碼語言,增加了ASP的編程功能,使用者也可安裝其它指令碼語言,如Perl、Rexx等。
3.ASP的運行環境
目前ASP可運行在三種環境下。
1) WINDOWS NT server 4.0運行IIS 3.0(Internet Information Server)以上。
2) WINDOWS NT workstation 4.0運行Peer Web Server 3.0以上。
3) WINDOWS 95/98運行PWS(Personal Web Server)。
其中以NT server上的IIS功能最強,提供了對ASP的全面支援,是建立高速、穩定的ASP首頁的最佳選擇。
4.ASP的內建對象
ASP提供了六個內建對象,供使用者直接調用:
1) Application對象:負責管理所有會話資訊,可用來在指定的應用程式的所有使用者之間共用資訊。
2) Session對象:存貯特定使用者的會話資訊,只被該使用者訪問,當使用者在不同WEB頁面跳轉時,Session中的變數在使用者整個會話過程中一直儲存。Session對象需cookie支援。
3) Request對象:從使用者端取得資訊傳遞給伺服器,是ASP讀取使用者輸入的主要方法。
4) Response對象:伺服器將輸出內容發送到使用者端。
5) Server對象:提供對伺服器有關方法和屬性的訪問。
6) Object Context對象:IIS 4.0新增的對象,用來進行交易處理。此項功能需得到MTS(Microsoft Transcation Server)管理的支援。
5. ASP的主要內建群組件:
1) Ad Rotator組件:用來按指定計劃在同一頁上自動輪換顯示廣告,用於WWW上日益重要的廣告服務。
2) Browser Capabilities組件:確定訪問WEB網站的使用者瀏覽器的功能資料,包括類型、效能、版本等。
3) Database Access組件:提供ADO (ActiveX Data Objects)來訪問支援ODBC的資料庫。
4) File Access組件:提供對伺服器端檔案的讀寫功能。
5) Content Linking組件:產生WEB頁內容列表,並將各頁順序串連,用於製作導航條。
此外,還可安裝Myinfo、Counters、Content Rotator、Page Count等組件,使用者也可自行編製Actiive組件,以提高系統的實用性。
6. Database Access組件ADO
WWW上很重要的應用是訪問WEB資料庫,用ASP訪問WEB資料庫時,必須使用ADO組件,ADO是ASP內建的ActiveX伺服器組件(ActiveX Server Component),通過在WEB伺服器上設定ODBC和OLEDB可串連多種資料庫:如SYBASE、ORACLE、INFORMIX、SQL SERVER、ACCESS、VFP等,是對目前微軟所支援的資料庫進行操作的最有效和最簡單直接的方法。
ADO組件主要提供了以下七個對象和四個集合來訪問資料庫。
1) Connection對象:建立與後台資料庫的串連。
2) Command對象:執行SQL指令,訪問資料庫。
3) Parameters對象和Parameters集合:為Command對象提供資料和參數。
4) RecordSet對象:存放訪問資料庫後的資料資訊,是最經常使用的對象。
5) Field對象和Field集合:提供對RecordSet中目前記錄的各個欄位進行訪問的功能。
6) Property對象和Properties集合:提供有關資訊,供Connection、Command、RecordSet、Field對象使用。
7) Error對象和Errors集合:提供訪問資料庫時的錯誤資訊。
三. ASP訪問資料庫步驟
在ASP中,使用ADO組件訪問後台資料庫,可通過以下步驟進行:
1. 定義資料來源
在WEB伺服器上開啟“控制台”,選中“ODBC”,在“系統DSN”下選“添加”,選定你希望的資料庫種類、名稱、位置等。本文定義“SQL SERVER”,資料來源為“HT”,資料庫名稱為“HTDATA”,指令碼語言採用Jscript。
2,使用ADO組件查詢WEB資料庫
1) 調用Server.CreateObject方法取得“ADODB.Connection”的執行個體,再使用Open方法開啟資料庫:
conn = Server.CreateObject(“ADODB.Connection”)
conn.Open(“HT”)
2) 指定要執行的SQL命令
串連資料庫後,可對資料庫操作,如查詢,修改,刪除等,這些都是通過SQL指令來完成的,如要在資料表signaltab中查詢代碼中含有“X”的記錄
sqlStr = “select * from signaltab where code like ‘%X%’”
rs = conn.Execute(sqlStr)
3) 使用RecordSet屬性和方法,並顯示結果
為了更精確地跟蹤資料,要用RecordSet組件建立包含資料的遊標,遊標就是儲存在記憶體中的資料。
rs = Server.CreateObject(“ADODB.RecordSet”)
rs.Open(sqlStr,conn,1,A)
註:A=1讀取
A=3 新增、修改、刪除
在RecordSet組件中,常用的屬性和方法有:
rs.Fields.Count: RecordSet對象的欄位數。
rs(i).Name: 第i個欄位的名稱,i為0至rs.Fields.Count-1
rs(i): 第i個欄位的資料,i為0至rs.Fields.Count-1
rs("欄位名"): 指定欄位的資料。
rs.Record.Count:遊標中的資料記錄總數。
rs.EOF: 是否最後一條記錄。
rs.MoveFirst: 指向第一條記錄。
rs.MoveLast: 指向最後一條記錄。
rs.MovePrev: 指向上一條記錄。
rs.MoveNext: 指向下一條記錄。
rs.GetRows: 將資料放入數組中。
rs.Properties.Count:ADO的ResultSet或Connection的屬性個數。
rs.Properties(item).Name:ADO的ResultSet或Connection的名稱。
rs.Properties: ADO的ResultSet或Connection的值。
rs.close(): 關閉串連。
4) 關閉資料庫
conn.close()
四.查詢WEB資料庫舉例
下面這段樣本程式是訪問SQL SERVER資料庫的 signaltab表,表中有三個欄位:code(代碼欄位,字元型,3位),class(類別欄位,字元型,10位),memo(備忘欄位,字元型,20位)。程式中資料來源DSN:HT、使用者名稱:client、口令:passwd。
螢幕輸入頁面input.asp
<% @ language=javascript %>
<html>
<head>
<title>請輸入查詢條件PLEASE INPUT CONDITION</title>
</head>
<form action=shotquery.asp METHOD="post" target="_self">
<input TYPE="text" size=6 maxlength=3 NAME=signalCode VALUE="代碼"> </fo
nt></p>
</center></div><p></p>
<input LANGUAGE="JavaScript" TYPE="submit" VALUE=“確認” NAME="B1"
<input TYPE="reset" VALUE=“清除”NAME="B2">
<input LANGUAGE="JavaScript" TYPE="button" NAME="B3" VALUE=“返回”
ONCLICK="window.history.back()">
</font></p>
</center></div>
</form>
</body>
</html>
資料庫處理常式shotquery.asp
<!--#include virtual="/master/lib.inc"-->
<script language=javascript runat=server>
var signalCode=Request.Form("signalCode");
dbConn = Server.CreateObject("ADODB.Connection");
dbConn.open("DSN=HT;UID=client;PWD=passwd");
rs = Server.CreateObject("ADODB.RecordSet");
var sqlStr = "select * from signaltab order by code";
rs.open(sqlStr,dbConn,1);
if(rs.RecordCount < 1) {
Response.write("<p> 無符合條件記錄</p>");
Response.write("<p><form> <input type='button' value=' 返回' oncli
ck='window.history.back()' name='b1'></form></p>");
}
else {
Response.write("<P><center><B>資料查詢結果</B></center></P>");
Response.write("<tr><td><b>代碼</b></td><td><b>分類</b></td><td><b>備忘<
/b></td>");
for(var i = 1;i <= rs.Pagesize;i++) {
if(!rs.Eof) {
Response.write("<td><span style='font-size:9t'>"+rs("code")+"</span></td
>");
Response.write("<td><span style='font-size:9t'>"+rs("class")+"</span></t
d>");
Response.write("<td><span style='font-size:9t'>"+rs("memo")+"</span></td
>");
Response.write("</tr>");
rs.MoveNext();
}
else break;
}
Response.write("</table></form>");
rs.close();
dbConn.close();
}
</script>