目前,在WINDOWS環境下訪問WEB數據庫的技術有很多,主要包括:
1.通用網關接口
CGI是較早的技術。適用於UNIX、WINDOWS等多種服務器平臺,但CGI開發成本高,維護困難,功能有限,沒有事務處理功能,占用服務器資源較多。
2.互聯網數據庫連接器
IDC集成在ISAPI(Internet Server API)中,充分利用了DLL技術,易於擴展,但編程比CGI復雜,只適用於小型數據庫系統。
3.高級數據庫連接器ADC
ADC提供ActiveX控件來訪問數據庫。其主要特點是數據查詢由客戶端瀏覽器執行,所以服務器端數據庫中的壹些記錄需要下載到客戶端,系統開銷大,響應慢,只適合特別頻繁的數據庫查詢操作。
4.JAVA/JDBC語言編程
JAVA語言是壹種面向對象的、可移植的多線程控制語言,可以通過JDBC連接到數據庫。用JAVA/JDBC編寫的軟件具有可移植性,適用於各種操作系統,但執行效率和速度並不理想,目前無法建立高效高速的應用。
5.動態服務器頁面ASP(動態服務器頁面)
ASP是微軟公司最新的WEB應用程序開發技術,專註於動態網頁和WEB數據庫的開發。它編程靈活、簡潔,具有較高的性能。是目前訪問web數據庫的最佳選擇。
2.ASP簡介
1的原理。ASP訪問數據庫
ASP是壹個服務器端腳本執行環境,可以用來生成和執行動態的、高性能的WEB服務器程序。
當用戶用瀏覽器請求ASP主頁時,WEB服務器響應,調用ASP引擎執行ASP文件,並解釋其中的腳本語言(JScript或VBScript)。數據庫通過ODBC連接,數據庫操作由數據庫訪問組件ADO(ActiveX數據對象)完成。最後,ASP生成壹個包含數據查詢結果的HTML主頁,返回給用戶顯示。
由於ASP運行在服務器上,運行結果以HTML主頁的形式返回給用戶的瀏覽器,所以ASP源程序不會被泄露,增加了系統的安全性和保密性。另外,ASP是壹個面向對象的腳本環境,用戶可以添加ActiveX組件來擴展其功能和應用。
2.ASP頁面的結構:
asp的程序代碼簡單通用,文件名以。ASP,而ASP文件通常由四部分組成:
1)標準HTML標簽:所有HTML標簽都可以使用。
2) ASP語法命令:位於
3)服務器端include語句:#include語句可以用來調用其他ASP代碼,增強了編程的靈活性。
4)腳本語言:ASP自帶JScript和VBScript兩種腳本語言,增加了ASP的編程功能。用戶也可以安裝其他腳本語言,比如Perl和Rexx。
3.ASP的運行環境
目前ASP可以在三種環境下運行。
1) WINDOWS NT server 4.0運行在IIS 3.0(互聯網信息服務器)之上。
2) WINDOWS NT workstation 4.0運行Peer Web Server 3.0或更高版本。
3)視窗95/98運行PWS(個人網絡服務器)。
其中NT服務器上的IIS功能最強,為ASP提供了全面的支持,是創建高速穩定的ASP主頁的最佳選擇。
4.ASP的內置對象
ASP提供了六個內置對象供用戶直接調用:
1)應用對象:負責管理所有的會話信息,可以用來* * *在指定應用的所有用戶之間共享信息。
2) Session對象:存儲特定用戶的會話信息,只有該用戶才能訪問。當用戶跳轉到不同的網頁時,會話中的變量在用戶的整個會話中保持不變。會話對象需要cookie支持。
3)請求對象:從客戶端獲取信息並傳遞給服務器是ASP讀取用戶輸入的主要方法。
4)響應對象:服務器將輸出發送給客戶端。
5)服務器對象:提供對服務器的相關方法和屬性的訪問。
6)對象上下文對象:IIS 4.0添加的對象,用於事務處理。該功能需要MTS(微軟交易服務器)管理的支持。
5.ASP的主要內置組件:
1)廣告輪換器組件:用於按照指定的計劃自動在同壹頁面上輪換顯示廣告,用於WWW上越來越重要的廣告服務。
2)瀏覽器能力組件:確定用戶訪問網站的瀏覽器的功能數據,包括類型、性能、版本等。
3)數據庫訪問組件:提供ADO (ActiveX數據對象)來訪問支持ODBC的數據庫。
4)文件訪問組件:提供讀寫服務器端文件的功能。
5)內容鏈接組件:生成網頁的內容列表,並按順序連接頁面,制作導航欄。
此外,還可以安裝Myinfo、Counters、Content Rotator、Page Count等組件,用戶也可以自己編寫Actiive組件,提高系統的實用性。
6.數據庫訪問組件ADO
WWW的壹個非常重要的應用是訪問WEB數據庫。用ASP訪問WEB數據庫時,必須使用ADO組件。ADO是內置於ASP中的ActiveX服務器組件。通過在WEB服務器上設置ODBC和OLEDB,可以連接各種數據庫,如SYBASE、ORACLE、INFORMIX、SQL SERVER、ACCESS、VFP等。,這是目前操作微軟支持的數據庫最有效、最簡單、最直接的方法。
ADO組件主要提供以下七個對象和四個集合來訪問數據庫。
1)連接對象:與後臺數據庫建立連接。
2)命令對象:執行SQL指令,訪問數據庫。
3)參數對象和參數集合:為命令對象提供數據和參數。
4)記錄集對象:存儲訪問數據庫後的數據信息,是最常用的對象。
5) Field對象和Field集合:提供對記錄集中當前記錄的所有字段的訪問。
6)屬性對象和屬性集合:為連接、命令、記錄集和字段對象提供相關信息。
7)錯誤對象和錯誤集合:在訪問數據庫時提供錯誤信息。
3.ASP訪問數據庫的步驟
在ASP中,使用ADO組件訪問後臺數據庫可以通過以下步驟完成:
1.定義數據源
打開WEB服務器上的控制面板,選擇ODBC,選擇系統DSN下的添加,然後選擇所需數據庫的類型、名稱和位置。本文定義了SQL SERVER,數據源為HT,數據庫名為HTDATA,腳本語言為Jscript。
2、使用ADO組件查詢WEB數據庫
1)呼叫服務器。CreateObject方法來獲取“ADODB”的實例。連接",然後用Open方法打開數據庫:
conn =服務器。CreateObject("ADODB。連接”)
連接打開(“HT”)
2)指定要執行的SQL命令
連接好數據庫後,就可以對數據庫進行操作了,比如查詢、修改、刪除,這些都是通過SQL指令來完成的,比如查詢數據表signaltab中代碼中帶有“X”的記錄。
sqlStr = " select * from signal tab where code like ' % X % ' "
rs =連接執行(sqlStr)
3)使用記錄集的屬性和方法,並顯示結果。
為了更準確地跟蹤數據,記錄集組件用於創建包含數據的遊標,數據是存儲在內存中的數據。
rs =服務器。CreateObject("ADODB。記錄集”)
rs。打開(康涅狄格州sqlStr,1,A)
註:A=1讀數
A=3添加、修改和刪除
在記錄集組件中,常用的屬性和方法有:
Rs.fields.count:記錄集對象的字段數。
Rs(i)。Name:第I個字段的名稱,其中I是0到rs。字段。計數-1。
Rs(i):第I個字段的數據,其中I為0至Rs。字段。計數-1。
Rs(“字段名稱”):指定字段的數據。
盧比Record.Count:遊標中數據記錄的總數。
盧比EOF:是最後壹張唱片嗎?
盧比指向第壹條記錄。
盧比指向最後壹條記錄。
盧比指向前壹條記錄。
盧比指向下壹條記錄。
盧比GetRows:將數據放入數組。
RS . properties . count:ADO的結果集或連接的屬性數。
Rs.properties(項目)。name:ADO的結果集或連接的名稱。
RS . properties:ado的結果集或連接的值。
Rs.close():關閉連接。
4)關閉數據庫
conn.close()
四。查詢WEB數據庫的示例
以下示例程序用於訪問SQL SERVER數據庫的signaltab表。表格中有三個字段:代碼(代碼字段,字符類型,3位)、類別(分類字段,字符類型,10位)、備註(備註字段,字符類型,20位)。程序中數據源DSN: HT,用戶名:client,密碼:passwd。
屏幕輸入頁面input.asp
& lt% @ language = javascript % & gt
& lthtml & gt
& lthead & gt
& lttitle & gt請輸入查詢條件請輸入條件
& lt/head & gt;
& ltform action = shot query . ASP METHOD = " post " target = " _ self " & gt;
& ltinput type = " text " size = 6 maxlength = 3 name = signal code value = " code " > & lt;/font & gt;& lt/p & gt;
& lt/center & gt;& lt/div & gt;& ltp & gt& lt/p & gt;
& lt輸入語言= " JavaScript " type = " submit " value = " confirm " NAME = " b 1 "
& ltinput TYPE = " reset " value = " clear " NAME = " B2 " & gt;
& lt輸入語言= "JavaScript "類型= "按鈕"名稱= "B3 "值= "返回"
onCLICK = " window . history . back()" & gt;
& lt/font & gt;& lt/p & gt;
& lt/center & gt;& lt/div & gt;
& lt/form & gt;
& lt/body & gt;
& lt/html & gt;
數據庫處理器shotquery.asp
& lt!-# include virtual = "/master/lib . Inc "-& gt;
& lt腳本語言= javascript runat = server & gt
var signalCode =請求。表格(" signal code ");
dbConn =服務器。CreateObject("ADODB。連接”);
dbconn . open(" DSN = HT;UID =客戶端;PWD = passwd ");
rs =服務器。CreateObject("ADODB。記錄集");
var sqlStr = " select * from signal tab order by code ";
rs.open(sqlStr,dbConn,1);
如果(rs。記錄計數& lt1) {
response . write(" & lt;p & gt沒有合格的記錄
response . write(" & lt;p & gt& lt表單& gt& ltinput type = ' button ' value = ' returns ' onclick = ' window . history . back()' name = ' b 1 ' > & lt;/form & gt;& lt/p >;);
}
否則{
response . write(" & lt;P & gt& lt中心& gt& ltB& gt;數據查詢結果
response . write(" & lt;tr & gt& lttd & gt& ltb & gt密碼
for(var I = 1;我& lt= rs。頁面大小;i++) {
如果(!rs。Eof) {
response . write(" & lt;td & gt& ltspan style='font-size:9t ' >+RS(" code ")+" & lt;/span>。& lt/TD >;);
response . write(" & lt;td & gt& ltspan style='font-size:9t ' >+RS(" class ")+" & lt;/span>。& lt/TD >;);
response . write(" & lt;td & gt& ltspan style='font-size:9t ' >+RS(" memo ")+" & lt;/span>。& lt/TD >;);
response . write(" & lt;/tr >;);
rs。MoveNext();
}
else break
}
response . write(" & lt;/table & gt;& lt/form >);
RS . close();
dbconn . close();
}
& lt/script & gt;