ASP中 SQL語句 使用方法第2/3頁
更新時間:2007年11月22日 22:55:00 作者:
5. 開始執(zhí)行
在學(xué)會了SELECT語句的構(gòu)造和用途之后你就該學(xué)習(xí)如何使用它了。在你所掌握的數(shù)據(jù)庫工具下,這可能意味著你得按下某個寫著“執(zhí)行”字樣的按鈕。在ASP網(wǎng)頁上,可以立即執(zhí)行SQL語句也可以當(dāng)作存儲過程調(diào)用。
一旦創(chuàng)建了SQL 語句,你還得設(shè)法訪問其查詢結(jié)果。顯然,這里的關(guān)鍵就是ASP recordset。在使用非SQL的recordset時,創(chuàng)建recordset的代碼通常如下所示:
Dim objRec
Set objRec = Server.CreateObject ("ADODB.Recordset")
objRec.Open "customers", objConn, 0, 1, 2
如果你對ASP比較熟悉以上的代碼對你可就不陌生了,你應(yīng)該知道“customers”表示你打開數(shù)據(jù)庫內(nèi)一個數(shù)據(jù)表的名字。
打開recordset
為了充分利用你更為熟悉的SQL技能,你需要調(diào)整常規(guī)ASP網(wǎng)頁上最常采用的recordset:
Dim objRec
Set objRec = Server.CreateObject ("ADODB.Recordset")
objRec.Open SQL, objConn, 0, 1, 2
這里唯一的修改就是在objRec.Open,之后用包含SQL語句的變量代替了要查詢的數(shù)據(jù)表的名稱。
這種方法的優(yōu)點之一是你可以指定游標(biāo)類型(如以上0, 1 ,2 所示)。
執(zhí)行SQL
你可以用緊湊的一行代碼執(zhí)行SQL語句來創(chuàng)建recordset。以下是語法:
Dim objRec
set objRec = objConn.Execute(SQL)
在上例中,你所看到的SQL是你存放自己SQL SELECT 語句的變量。該代碼行“運行”SQL語句(或者說對數(shù)據(jù)庫進行查詢),選取數(shù)據(jù)并把數(shù)據(jù)存放在recordset 內(nèi),在上例中就是變量objRec。這種方法的主要缺點是你不能選擇自己想采用的游標(biāo)類型。相反,recordset總是用前向游標(biāo)打開。
因為游標(biāo)的緣故,你或許打算熟悉兩種創(chuàng)建recordset的方法。直接執(zhí)行查詢節(jié)省了鍵入字符所消耗的時間,但那樣的話你就得采用默認的游標(biāo)了,這樣有可能遭遇經(jīng)常不能正常運行的毛病。不管你具體采用哪種辦法,兩者之間的最大的差別也不外乎代碼精練與否。在不考慮你取得什么字段、你的標(biāo)準(zhǔn)是什么的前提下,也不管你如何存儲數(shù)據(jù),采用SQL式的recordset 在體積上會比ASP上打開的標(biāo)準(zhǔn)recordset 要小得多,更別提操作起來的簡易性了。畢竟,通過過濾數(shù)據(jù),你消除了耗費時間的if-then 測試和可能用到的循環(huán)。
編寫測試用SQL
這里有個技巧,許多專業(yè)ASP程序員習(xí)慣在測試網(wǎng)頁的時候“編寫”自己的SQL語句。這樣做可以幫助你調(diào)試代碼,因為你可以從中看到傳遞給服務(wù)器執(zhí)行的字符串。而你要做的無非是增加Response.WriteyourVariable 在屏幕上顯示有關(guān)信息。在你把和SQL有關(guān)的問題提交給ASP討論組的時候你就應(yīng)該附上這些信息。
6. 存儲查詢
當(dāng)你的查詢相對簡單的時候,每次從頭開始創(chuàng)建SQL語句也不費什么工夫,不過,復(fù)雜的查詢就不同了,每次都從頭來會產(chǎn)生很多開發(fā)錯誤。因此,一旦讓SQL順利地運行起來,你最好把它們存起來,在需要時再調(diào)用它們。這樣,哪怕是一個簡單查詢你都能隨時用上存儲的查詢語句了。
假設(shè)你每周都要給團隊做一次報告,指出目前存在的業(yè)務(wù)支持問題,這些數(shù)據(jù)需要從你的數(shù)據(jù)庫中選取,而且要按照日期選擇記錄,同時根據(jù)你所在團隊所采用的支持問題的類別排序。一旦你設(shè)計了這一查詢,你何必以后每周都重新編寫一次呢?不要在你的HTML頁面上創(chuàng)建查詢,你應(yīng)該用你的數(shù)據(jù)庫工具創(chuàng)建查詢并且保存它。
然后你可以采用ActiveCommand 屬性把查詢插入到你的ASP網(wǎng)頁。頭一兩回你可能會覺得沒啥意思,其實也就幾行代碼而已:
Set objSQ = Server.CreateObject ("ADODB.Command")
objSQ.ActiveConnection = "databaseName"
objSQ.CommandText = "storedQueryName"
objSQ.CommandType = adCmdStoredProc
set objRec = objSQ.Execute
注意,采用adCmdStoredProc 表示你已經(jīng)在頁面上包含了adovbs.inc 文件。該文件定義了你可以按照名字而非數(shù)字進行訪問的Access常數(shù)。只需要在頁面上包含該文件即可(<!--#INCLUDE -->),然后你就可以用adCmdStoredProc 這類名字了。這樣,將來你再看到的時候更容易理解以上被存儲的查詢到底是個什么意思。
7. ORDER BY
從Access數(shù)據(jù)庫中選取記錄有件最令人喪氣的事情,它們是以怎樣的順序輸入到數(shù)據(jù)庫內(nèi)就按照怎樣的順序出來。就算你在Access環(huán)境內(nèi)采用Sort By來改變記錄視圖,數(shù)據(jù)表內(nèi)的記錄順序也并沒有發(fā)生改變。
如果你正在使用ASPrecordset在網(wǎng)頁上寫出記錄,那么你或許知道亂紛紛的順序是多令人痛苦的事。但是你可能不得不經(jīng)常得面對這一問題,因為并不存在什么簡單方便的解決方案。好在ORDER BY 可以簡化這一難題。
為了對你的結(jié)果排序,只要在SELECT語句末尾加上ORDER BY,然后指定你需要排序的參照列即可。因此,如果你想要根據(jù)顧客的姓氏對Customers表排序,那么你可以編寫如下的查詢語句:
SQL = "SELECT c_lastname, c_firstname, c_email FROM Customers ORDER BY c_lastname"
這樣,只要你建立了recordset而且開始把結(jié)果寫到屏幕上,你就會看見數(shù)據(jù)按照字母順序排列起來了。
多級排序
其實不僅僅可以在SQL語句中進行一級排序。實際上,在很多情況下,你可能會希望指定兩到三級深度的數(shù)據(jù)排序。假設(shè)你有以下數(shù)據(jù)表,其內(nèi)容如下所示:
先前采用的單級ORDER BY 排序是按下面的順序取出數(shù)據(jù)的:
Absurdly Assured
absurd@assured.com
Absolutely Assured
absolutely@assured.com
Crazed Coder
crazy@coder.net
Loosely Fringe
loose@fringe.to
Lunatic Fringe
lune@fringe.to
Hands On
hands@yes.org
相關(guān)文章
給萬博系統(tǒng)的新聞系統(tǒng)增加分頁功能[配有詳細說明]
給萬博系統(tǒng)的新聞系統(tǒng)增加分頁功能[配有詳細說明]...2007-03-03