ado|web|資料|資料庫 ASP和ADO簡介
DO中可用VBScript、JavaScript 語言來控制資料庫的訪問(而ASP恰恰是指令碼語言的解釋環境)和查詢結果的輸出;ADO中使用RecordSets對象對資料庫進行操作;可以串連多種支援OD BC的資料庫。資料查ASP(Active Server Pages)是一個伺服器端的(Server-side)指令碼執行環境,使用者可用它產生和執行動態、互動的、高效能的Web伺服器應用程式。當指令碼在伺服器端而不是在用戶端執行時,Web伺服器將完成產生髮往瀏覽器的HTML(Hypertext Markup Langua ge)頁的所有工作。圖1
圖1是ASP的工作模式。當瀏覽器向Web伺服器提出檔案(.asp)的請求時,一個ASP指令碼就開始執行,這時Web伺服器調用ASP,把該檔案全部讀入並執行每一條命令,然後將結果以HTML頁面形式送回瀏覽器。
ADO(ActiveX Data Object,ActiveX資料對象)是一個ASP內建的A ctiveX伺服器組件(ActiveX Server Component),用於資料庫訪問,可把它與ASP結合起來,建立提供資料庫資訊的網頁內容,對資料庫進行查詢、插入、更新、刪除等操作。
要執行ADO,伺服器端須安裝Windows NT Server和Internet I nformation Serv er(IIS),而用戶端只要有IE或Netscape較新版本的瀏覽器即可。網站資料庫訪問的幾種方案
實現Web資料庫訪問大致可分為兩類,一類是以Web伺服器作為中介,把瀏覽器和資料來源串連起來,在伺服器端執行對資料庫的操作;另一類是把應用程式和資料庫下載到用戶端,在用戶端執行對資料庫的訪問。
1. 公用網關介面CGI(Common Gateway Interface)
當瀏覽器發出HTTP請求時,Web伺服器執行相應的應用程式,訪問網站資料庫,並將查詢結果以HTML格式送回到瀏覽器。這種方式有很多缺點,功能有限、開發困難,且不具備交易處理(Transaction)功能, 這在很大程度上限制了它的應用。
2. Internet資料庫連接器IDC(Internet Database Connector)
這是一種簡易方案,對資料庫的操作仍然放在Web端,但使用者可通過SQL(Structured Query Language)語句對資料庫進行查詢、輸入、更新、刪除等操作。IDC設計簡易,不用編譯就可直接執行,且支援對資料的多重查詢(Multiple Query)。
3. 先進資料庫連接器ADC(Advanced Data Connector)
前兩種方案中對資料庫的操作都是在伺服器端進行,而ADC是在瀏覽器端執行資料查詢動作。當瀏覽器提出對資料庫的操作請求時,ADC 先將相應的資料庫下載到瀏覽器端,在使用者端對資料庫進行操作。顯然,這種方案效率很高。用戶端對資料庫的查詢是由安裝在用戶端的A DC ActiveX Control完成的,而這個ActiveX Control是由站台伺服器自動下載並安裝在用戶端的。
4. ADO與ASP
這是一種完全的Web資料庫訪問方案,可把ADO與ASP結合起來,建立提供資料庫資訊的網頁內容,在網頁中執行SQL命令,對資料庫進行查詢、插入、更新、刪除等操作。A詢執行個體:港澳證件資訊查詢
本例要完成的操作是對港澳出入境資料庫進行查詢,客戶可給出一種或幾種查詢條件,然後按要求顯示查詢結果。
1. 確定資料來源
要訪問網上資料庫,首先設定資料來源。在伺服器上開啟"我的電腦"中的"控制台",雙擊"ODBC";在"系統DSN"下選"添加",選出預先設好的資料庫種類、名稱和位置。這裡要用到的是FoxPro資料庫,資料來源名稱為GACX,主要資料庫名稱為visa.dbf,編碼資料庫名稱為zd.dbf 。
2. ADO查詢資料庫的使用
ADO查詢資料庫的設計方法是先用Server.CreatObject取得對象" ADODB.Connection "的一個執行個體,並用"Open"開啟待訪問的資料庫:
Set Conn=Server.CreatObject("ADODB.Connection")
Conn.Open "待訪問的資料庫名稱"
然後執行SQL命令,即對資料庫進行操作,這裡要使用Execute命令 :
Set RS =Conn .Execute( " Select ...From...Where...")下一步就可對資料庫進行查詢操作,要用到RecordSets對象的如下命令:
* RS.Fildes.Count
RecordSets的欄位數
* RS(i).Name
第i個欄位名
* RS(i)
第i個欄位的記錄
* RS("欄位名")
指定欄位的記錄
* RS.EOF
是否指向最後一個欄位 True or False
* RS.MoveFirst
指向第一條記錄
* RS.MovePrev
指向前一條記錄
* RS.MoveNext
指向後一條記錄
* RS.MoveLast
指向最後一條記錄
* RS.GetRows
將查詢結果存放在數組中,然後再從數組中讀取
* RS.Properties.Count
得到ADO的Connection或ResultSet的屬性總數
* RS.Properties(Item).Name 得到ADO的Connection或ResultSe t的屬性名稱
* RS.Properties(Item)
得到ADO的Connection或ResultSet的屬性值
3. 具體實現
首頁面為港澳證件資訊查詢,對應程式為gacx.asp。查詢結果以兩種方式顯示,一是顯示主要資訊——港澳證件資訊查詢結果清單,對應程式為gacxlb.asp;一是顯示全部資訊——港澳證件資訊查詢結果, 對應程式為gacxxq.asp。如果查詢條件不能滿足時,還將顯示一個提示頁面,告訴使用者不存在滿足條件的結果,由程式gacxts.asp完成。
根據客戶提供的資料庫和要求查詢的各項內容建立查詢、查詢結果、查詢結果清單頁面,並給出一個簡單的提示介面,告訴使用者不存在滿足條件的結果,請重新查詢,這些工作可用FrontPage 98完成,整個頁面應該做到簡潔大方,主題鮮明。程式碼在Microsof t Visual I nterDev下編寫。
下面處理編碼資料庫zd.dbf中的內容。從圖2中可看到有很多帶下拉框的選項,例如"性別"、"出生地"等,這些選項的內容都是從zd.d bf資料庫中提取出來的。因為有的選項內容很多,例如出境口岸有101 項之多,雖然也可用< select><option>...</option></se lect>格式在HTML頁面中把各個選項列舉出來,但將給程式的維護帶來很大麻煩, 一旦編碼資料庫的內容有變動,程式也將作很多修改。而且帶下拉框的選項都是在zd.dbf中編碼,往主要資料庫中輸入資料時這些選項都只輸入編碼,但顯示時卻不能顯示編碼,必須把編碼對應的漢字顯示出來。這段程式碼如下(以性別為例): 圖2
<%
Set Conn=Server.CreatObject("ADODB.Connection")
Conn.Open "GACX"
Set RS =Conn.Execute("Select BC,MC From zd Where BC Like "se%"")
Response.Write"<SELECT SIZE=1 NAME="SEX">"Do While Not R S.EOF
Response.Write"<option value=‘"RS(0)"'>"&RS(1)
Rs.MoveNext
Loop
Response.Write "</SELECT>"
RS.Colse
Conn.Colse
%>
其中,zd.dbf包含兩個欄位MC、BC,MC表示待編碼項,如男、女,BC 表示編碼,如性別編碼的前兩位為"se",男用"se1"表示,女用"se2" 表示。
資料庫查詢中最重要的是如何取得查詢條件。本例中要查詢的項可以分為兩類:一類是輸入的text類的查詢條件,另一類是從下拉框中選出來的項,在處理時要區別對待。te xt類型的查詢條件很好處理, 例如姓名,筆者輸入的內容命名為"xm",如果輸入的查詢項不為空白時就增加一個查詢條件"NAME=Request.Form("xm")"即可。下拉框的處理較複雜,當下拉框選中一項時,例如性別選中男,下拉框中輸入的是"se 1"(但反映在資料庫中時為"S EX=1",因為資料庫中輸入字典中帶編碼的項時只輸入編碼),就是要查詢"SEX=se1"的項。處理時要把"se1"中的"1"提取出來,用一個函數mid即可,查詢條件為"SEX=mid("se1",3, 1)",即從資料庫中尋找SEX=1的項,並把所有滿足條件的項不重複地列舉出來。
查詢結果顯示很容易實現,只須把查詢結果的每條記錄按列表的方式顯示出來即可,但在顯示查詢結果時要顯示編碼對應的漢字,就是到字典中去找編碼為"se"&"1" 的項所對應的編碼值,程式如下:
<table border="1" width="95%" bordercolor="#C0C0C0" cell spacing="0" cell padding="0"