當你用 ASP 編寫服務器端應用程序時,必須依靠 ActiveX組件來強大 Web應用程序的功能,譬如:你需要連接數據庫,對數據庫進行在線操作等等,繼上篇介紹了AD Rotator 組件後,本篇將接著給大家介紹其它一些常用的 ASP ActiveX組件的使用方法。
最近仍有不少朋友來信問我, ASP 是否只能在 Microsoft IIS上運行,是否可以在非 NT平台上運作?本來這個問題已經回答過很多遍了 :
只是聽說過有某種可以支持的軟件,卻從沒見過。但一些熱情的朋友仍然孜孜不倦地來信詢問,於是在朋友們的盛情之下,我訪遍了 ASP 相關站點,竟驚奇的發現,原來 ASP 的確是可以運行在其它非 NT平台上的,因此在本篇的開頭,我就給來信的朋友們簡要介紹一下如何在非NT 平台上使用 ASP。
要在非 NT 平台上開發並運行 ASP應用程序我們可以依賴於一套名為 Instant ASP的第三方軟件,它的廣告標語非常吸引人“ASP Anytime, Anywhere”,我想所有 ASP 的開發者們看到如此的標語必然興奮不已。這套由 Halcyon軟件公司開發的軟件使得你無需重復開發原有 ASP應用程序即可以將它運行在任何操作平台上 !
這樣非但節省了大量的開發時間,而且使得 ASP真正成為了一種跨平台的 Internet、 Intranet 或 Extranet 應用程序。
Instant ASP 本身其實是一套基於 Java的應用程序,因此通過它你可以將基於 WEB 的 ASP應用程序運行在任何平台上,下表列出了 Instant ASP 目前版本所支持的操作平台。更令人吃驚的是 Instant ASP 不僅提供了 ASP的運作環境,而且它較目前市場上的 ASP應用還提供了更為強大和實用的功能,它將 ActiveX 組件和 EnterpriseJava Beans 或者 CORBA-compliant objects 組合起來,從而使 ASP有了更為廣泛的應用。它同樣提供了通過 ADO接口訪問連接各種數據庫,並生成動態頁面的強大功能。對於開發者而言可以使用自己擅長的編程語言或工具如
:Visual Basic, Jscript, VBScript, C++, Java, HTML, Delphi , MS Visual InterDev 等等來進行開發。關於 Instant ASP具體安裝和操作我就不在這裡展開了,有興趣的朋友可以到它的站點上去看看 halcyonsoft.com,你還可以免費下載一個試用版試試。
繼上一篇中作者給大家介紹了 AD Rotator組件的使用方法後,今天我們接著來看看其它的一些 ASP 常用組件。
一、 Database Access 組件
我們在 WEB 服務器上運用 WEB應用程序進行的最常見和最實用的任務就是訪問服務器端的數據庫。而ASP 內建的 Database Access 組件使得我們能夠輕而易舉地通過 ActiveX DataObjects (ADO)訪問存儲在服務器端的數據庫或其他表格化數據結構中的信息。 ADO是對當前微軟所支持的數據庫進行操作的最有效和最簡單直接的方法,它是一種功能強大的數據訪問編程模式,從而使得大部分數據源可編程的屬性得以直接擴展到你的Active Server 頁面上。可以使用 ADO 去編寫緊湊簡明的腳本以便連接到Open Database Connectivity (ODBC) 兼容的數據庫和 OLE DB 兼容的數據源,這樣ASP 程序員就可以訪問任何與 ODBC 兼容的數據庫,包括 MS SQL SERVER、Access、Oracle等等。如果您是一個對數據庫連接有一定了解的腳本編寫人員,那麼您將發現ADO命令語句並不復雜而且容易掌握。同樣地,如果您是一個經驗豐富的數據庫編程人員,您將會正確認識ADO 的先進的與語言無關性和查詢處理功能。熟悉 VB數據庫編程的朋友會發現 ADO 與RDO (Remote Data Objects)有某種類似的地方。但據說 ADO 的訪問的速度更快,內存需要更小。
下面給簡要介紹一下利用 ASP 的 Database Access 組件通過 ADO連接並操作 WEB 數據庫的步驟
第一步 : 指定想要連接的數據庫,有 DSN 和 DSN-less
兩種方法。
DSN(Data Source Name 數據源名稱 ):
建立一個系統數據源名稱,方法如下 :
1、單擊“開始”,選設置控制面板。
2、雙擊圖標“32 位 ODBC” , 將彈出一個對話框,選標簽“SystemDSN”
3、單擊“Add”添加一個 DSN 入口 , 選擇如“Microsoft Access Drive”並確認。
4、在“Data Source Name”欄裡輸入你希望指定的 DSN, 然後單擊“Select”選擇數據庫存放位置,你可以按“Browse”來選取。
5、以上步驟完成後在 ASP 程序中指定 DSN,如下 :
< %connstr = "DSN"%>
DSN-less: 是另一種通過在 ASP文件裡直接指定數據庫文件所在位置,而無需建立 DSN的方法。由於許多公司沒有自己的 WEB服務器,他們的網站往往是存放在遠端的虛擬服務器上,因此要建立和修改DSN 的設置比較麻煩。而使用 DSN-less方法直接指定遠端數據庫所在位置恰恰解決了這一問題,方法如下
: < %
connstr =
"DBQ="+server.mappath("database/source.mdb")+";DefaultDir=;DRIVER={Microsoft
Access Driver (*.mdb)};DriverId=25;FIL=MS
Access;ImplicitCommitSync=Yes;MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;
SafeTransactions=0;Threads=3;UserCommitSync=Yes;"
%>
在指定了想要連接的數據庫後,就可以通過以下方法連接並打開數據庫 :
< %
Set Conn = Server.CreateObject("ADODB.Connection")Conn.Open constr
%>
第二步 : 指定想要執行的 SQL 指令,可以使用 RecordSet。
當連接了數據庫後就可以對數據庫進行操作,比如查詢、刪除、更新等等,這些操作都是通過
SQL 指令來完成的,如下例在數據庫表 datebase 中查詢所有姓名中有“A”的記錄 :
< %
sql="select * from datebase where name like 'A%%'"
Set rs = Conn.Execute(sql)
%>
盡管 Connection 對象簡化了連接數據庫和查詢任務,但 Connection對象仍有許多不足。確切地說,檢索和顯示數據庫信息的 Connection對象不能用於創建腳本,您必須確切知道要對數據庫作出的更改,然後才能使用查詢實現更改。對於檢索數據、檢查結果、更改數據庫,ADO 提供了 Recordset 對象。正如它的名稱所暗示的那樣, Recordset對象有許多您可以使用的特性,根據您的查詢限制,檢索並且顯示一組數據庫行,即記錄。
Recordset
對象保持查詢返回的記錄的位置,允許您一次一項逐步掃描結果。根據
Recordset
對象的指針類型屬性設置,您可以滾動和更新記錄。數據庫指針可以讓您在一組記錄中定位到特定的項。
指針還用於檢索和檢查記錄,然後在這些記錄的基礎上執行操作。
Recordset
對象有一些屬性,可用於精確地控制指針的行為,提高您檢查和更新結果的能力。
Recordset 的使用方法如下 :
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open SQL 指令 , Conn, 1, 1 ' 讀取
或
rs.Open SQL 指令 , Conn, 1, 3 ' 新增、修改、或刪除
第三步 : 使用 RecordSet 屬性和方法,並顯示執行的結果。
通過以上指令,我們創建了一個包含數據的游標 (RecordSet)“rs”,事實上游標是存儲在活動內存中的類似記錄和字段的數組的東西,當通過RecordSet組件創建一個游標時,它從數據提供者的得到一個數據集,並用它來充實游標,可以想象ADO 產生的 RecordSet是一個象電子表格的記錄,它有一行行的記錄,在任何時候都有一行是它的當前行,而 RecordSet 的字段是用 RecordSet 的Field 集合表示的。下面列出了所創建的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.RecordCount: 游標中的數據記錄總數。
rs.EOF: 是否已指到最後一條記錄。
rs.MoveNext: 將指標移到下一筆記錄。
rs.MovePrev: 將指標移到上一筆記錄。
rs.MoveFirst: 將指標移到第一筆記錄。
rs.MoveLast: 將指標移到最後一筆記錄。
rs.Close: 關閉 RecordSet 對象
二、 Content Linking 組件
如果你的網站有一系列相互關聯的頁面的話, Content Linking組件將非常適合你的需求,它非但可以使你在這些頁面中建立一個目錄表,而且還可以在它們中間建立動態連接,
並自動生成和更新目錄表及先前和後續的 Web頁的導航鏈接。這對於列出聯機報刊、電子讀物網站以及論壇郵件是十分理想的選擇。
Content Linking 組件創建管理 URL 列表的 Nextlink 對象,要使用 ContentLinking 組件,必須需要先創建 Content Linking List 文件。 Content Linking組件正是通過讀取這個文件來獲得處理我們希望鏈接的所有頁面的信息。事實上該文件是一個純文本文件其內容如下:
page1.htm one
page2.htm two
page3.htm three
page4.htm four
page5.htm five
page6.htm six
這個文本文件的每行有如下形式 :
url description comment
其中, URL 是與頁面相關的超鏈地址, description提供了能被超鏈使用的文本信息, comment 則包含了不被 Content Linking組件解釋的注釋信息,它的作用如同程序中的注釋。 Description 和comment 參數是可選的。
下面來看看如何具體使用 Content Linking 組件 :
< html>
< head>
< meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
< title> < /title>
< /head>
< body>
< p> 網站首頁
< %
Set Link = Server.CreateObject("MSWC.NextLink")
count = Link.GetListCount("nextlink.txt")
Dim I
For I=1 to count
%>
< ul>< li>< a href="< %= Link.GetNthURL("nextlink.txt",
I) %>">< %= Link.GetNthDescription("nextlink.txt", I) %><
/a>
< % Next %>
< /body>
< /html>
在以上代碼中,我們先用 GetListCount 方法確定在文件nextlink.txt 中有多少條項目,然後利用循環語句,並使用 GetNthURL、
GetNthDescription 方法逐一將存儲在 nextlink.txt
文件中的內容讀出並顯示給客戶端浏覽器。
下面列出了 Content Linking 組件所有可使用的方法
GetListCount(file) 統計內容鏈接列表文件中鏈接的項目數。
GetNextURL(file) 獲取內容鏈接列表文件中所列的下一頁的 URL。
GetPreviousDescription(file)
獲取內容鏈接列表文件中所列的上一頁的說明行。
GetListIndex(file) 獲取內容鏈接列表文件中當前頁的索引。
GetNthDescription(file,index) 獲取內容鏈接列表文件中所列的第 N
頁的說明。
GetPreviousUR(file) 獲取內容鏈接列表文件中所列的上一頁的 URL。
GetNextDescription(file)
獲取內容鏈接列表文件中所列的下一頁的說明。
GetNthURL(file,index) 獲取內容鏈接列表文件中所列的第 N頁的說明。
在創建了網站的總導航頁面後,我們當然還希望在每一頁中添加一個“上一頁”、“下一頁”的導航超鏈,
下面就來看看如何實現導航超鏈。
由於考慮到你的網站可能包含了上千或更多的頁面,所以我們不可能在每一個頁面中都編寫實現導航超鏈的
ASP 代碼。因此,必須利用前幾篇中所學到的服務器端包容 SSI,這樣就避免了大量的重復作業,請看下例
:
< !--#include file="nextprev.inc"-->
只要將這端代碼放在每個頁面中即可。 Nextprev.inc
文件的內容如下 :
< %
Set Link = Server.CreateObject("MSWC.NextLink")
count = Link.GetListCount("nextlink.txt")
current = link.GetListIndex("nextlink.txt")
If current > 1 Then
%>
< a href="< %= Link.GetPreviousURL("nextlink.txt") %>">
上一頁 < /a>
< %
End If
If current < count Then
%>
< a href="< %= Link.GetNextURL("nextlink.txt") %>">
下一頁 < /a>
< % End If %>
有問題我們可以一起探討,共同進步...
*