ASP 3.0高級編程(三十八)_ASP教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:ASP技巧實例:關于對表單操作的程序以下為引用的內容: Inserting Form content into Database with ASP. <% ' -- Loader.asp -- ' -- version 1.5.2
8.3.3 使用連接狀態將連接字符串存入應用程序變量是一個常用的技巧,同使用一個包含文件一樣有效。例如,可以在global.asa文件中加入下面的代碼:
Sub Application_OnStart()
strConn = "Provider=SQLOLEDB; Data Source=WATCHER; " & _
"Initial Catalog=pubs; User Id=davids; Password=whisky"
Set Application("ConnectionString") = strConn
End Sub
在ASP頁面中,可以使用下面的代碼:
Set conPubs = Server.CreateObject("ADODB.Connection")
conPubs.Application("ConnectionString")
從個人的角度,我更喜歡使用包含文件的方法,因為我寫了許多不同的連接到各種服務器和數據庫的例子。使用應用程序方法將意味著每次必須關閉瀏覽器重新啟動應用程序。讀者可以使用自己喜歡的任一種方法,在速度上它們并沒有差別。
對于在本書的這節內的例子,將使用一個含有連接字符串的connection.asp文件人作為一個包含文件。
8.3.4 連接語法
上面所敘述的是相關理論,當確實要與數據存儲連接時,應該怎么辦?如果使用顯式定義的Connection對象,可以使用Open方法,它的語法如下:
connection.Open [ConnectionString], [UserID], [Password], [Options]
參數如表8-1所示:
表8-1 Open方法的參數及說明
參 數
說 明
ConnectionString
包含連接細節的字符串。可以是ODBC DSN的名稱、數據鏈接文件的名稱或真實的連接細節
UserID
連接期間,用戶使用的名字。覆蓋連接字符串中提供的任何用戶名
Password
用戶的口令。覆蓋連接字符串中提供的任何口令
Options
可以是adAsyncConnect,指定異步地建立連接。忽略這個參數,則建立一個同步連接
異步連接不用于ASP環境,因為腳本語言不能接收來自ADO的事件。
8.3.5 連接的例子
下面是幾個示例,這里假定strConn包含一個有效的連接字符串。
為了打開一個連接,使用Connection對象的Open方法。例如:
Set conPubs = Server.Connection("ADODB.Connection")
conPubs.Open strConn
' Some processing
conPubs.Close
也可以使用ConnectionString屬性:
Set conPubs = Server.CreateObject("ADODB.Connection")
conPubs.ConnectionString = strConn
conPubs.Open
' Some processing
conPubs.Close
這兩種實現方法之間沒有什么區別,如果使用前一種方法來實現連接,ConnectionString屬性同時也被賦值。
值得注意的是,一旦與數據存儲建立了連接,ADO可能會改變ConnectionString屬性值。不必擔心,ADO只填寫一些額外的屬性值。
8.3.6 連接緩沖池
連接緩沖池(connection pool)總使許多人感到困惑,其實原理非常簡單。當關閉一個連接,就用戶(和ADO)而言,這個連接已經關閉。但實際上OLE DB并沒有關閉這個連接,只是將其放入了非活動的連接緩沖池中。任何時候用戶(或其他人)打開一個連接,OLE DB首先檢測連接緩沖池中是否有相同連接細節的連接存在。如果有,將直接從緩沖池中取得此連接。如果沒有,則為用戶創建一個新的連接。為了避免浪費資源,經過一段缺省的時間段后,就從緩沖池中清除該連接。
那么,它的優點在哪里?打開一個連接可能是所進行的操作中最慢的操作之一,連接緩沖池使用戶能與數據存儲再次連接而無須重新創建連接。這對于那些連續打開和關閉大量連接的Web站點顯得特別重要。
對于ODBC連接,連接緩沖池由ODBC Data Source Administrator控制。對于OLE DB,不能改變連接緩沖池(或叫會話緩沖池)。
必須注意的是,連接緩沖池不是連接共享。一個連接只有在被客戶關閉后才能再次使用。
內務處理
為了使連接緩沖池生效,必須確保內務處理(Housekepping)處于有序狀態。這包括及時關閉Connection對象,這樣它們才能回到緩沖池重新使用。你可能認為不斷地打開、關閉連接對系統的開銷很大,但必須衡量一下可擴展性——你的應用程序可能有許多人在使用,OLE DB又非常善于管理連接資源。
一般的原則是:盡可能晚地建立連接,同時又要盡可能早地關閉連接,這樣保證連接打開的時間段最短。
8.4 記錄集
前面已經提到,記錄集是ADO中最常用的對象,這并不值得奇怪。畢竟,他們包含著數據。但是,對于記錄集還有比想象的更多的內容,知道數據如何保存和處理很重要,因為這為選擇使用哪種記錄集提供了更多的參考。
記錄集有不同的類型,在一些細小的地方存在著差異,很容易造成失誤。首先需要認真談論的是光標的概念。
8.4.1 光標
光標(cursor)是讓許多人感到困惑的概念,但實際上非常的簡單。
光標用來管理記錄集和記錄集的當前位置,后者是由當前記錄指針來處理的。
這不是Recordset對象所做的嗎?是的,但是記錄集也是依靠它的光標。這仍然沒有回答光標是什么這個問題,那么先來看一個記錄集,如表8-2所示:
AU_ID
AU_LNAME
AU_FNAME
PHONE
172-32-1176
White
Bob
408 496-7223
219-46-8915
Green
Marjorie
415 986-7020
238-95-7766
Carson
Cheryl
415 548-7723
267-41-2394
O'Leary
Michael
408 286-2428
274-80-9391
Straight
Dean
415 834-2919
341-22-1782
Smith
Meander
913 843-0462
這里有六行四列。打開一個記錄集,當前記錄就是第一個記錄,即為Bob White的那條記錄。用什么來標識當前記錄?用當前記錄指針。那么又如何處理這個指針呢?當需要移到下一條記錄或者是其他記錄時,是通過光標來實現的。在訪問當前行的字段時,光標知道目前位于哪一行,所以能返回正確的值。如果試圖移出記錄集的最后一行,光標也會處理。
理解光標的一種好方法是將光標想象成為一個可以在記錄集內移動的窗口。這一窗口與記錄集的單個行同樣高,同樣長,因此一次只能看到一行數據值。當你移到另一條記錄時,這個窗口也跟著移動。
也許你認為這相當簡單,但它確實很重要,因為能用光標做什么是由光標的類型決定的。
分享:例程:用ASP判斷文件地址是否有效以下為引用的內容: <% Response.Write("<head><style><!--span{ font-size: 9pt }--></style></head&g
相關ASP教程:
- 相關鏈接:
- 教程說明:
ASP教程-ASP 3.0高級編程(三十八)。