學(xué)習(xí)ASP的萬里長征就快到終點了:等把ASP的ADO組件搞定。當(dāng)然這也是最重要的一步,幾乎前面所有的學(xué)習(xí)都是為了這個最終的目的。OK,下面就來詳細(xì)系統(tǒng)地來一一掌握,步步為營,各個擊破。
一,擁有數(shù)據(jù)庫
可以這么說:靜態(tài)頁面和動態(tài)頁面最大的區(qū)別就是采用了數(shù)據(jù)庫。有關(guān)一個WEB程序采用數(shù)據(jù)庫和不采用的優(yōu)越性比較,就不去細(xì)細(xì)分析了,主要精力還是放在如何使用數(shù)據(jù)庫,如何熟練運用數(shù)據(jù)庫,如何更靈活地運用數(shù)據(jù)庫等等……其中運用操作數(shù)據(jù)庫主要是對數(shù)據(jù)庫內(nèi)容進(jìn)行:顯示、插入、修改、更新、查詢和刪除。
這些方法當(dāng)然也不是一口就能吃出來的,要慢慢感受咀嚼、理解消化。當(dāng)然首先很重要的便是先擁有數(shù)據(jù)庫了。否則,一切都是空談,巧媳婦難以無米之炊嘛。
一般而言,我們所說的數(shù)據(jù)庫其實就是一個數(shù)據(jù)庫文件,該文件是由一些數(shù)據(jù)庫管理系統(tǒng)(DBMS)建立生成的。目前一般的DBMS也就是常用常聽說的ACCESS,SQLSERVER,MYSQL,ORACLE。當(dāng)然一般個人站點,小型企業(yè)采用ACCESS完全足夠;稍微大些的就采用同樣是Microsoft公司的SQL SERVER或者是MYSQL,值得注意的是MYSQL一般是和另外一種網(wǎng)絡(luò)編程語言PHP完美結(jié)合的。當(dāng)然更大型的就采用ORACLE了。呵呵,曾經(jīng)在學(xué)習(xí)PB時還運用到SYBASE數(shù)據(jù)庫,UNIX系統(tǒng)的Informix數(shù)據(jù)庫……DBMS簡直是多如牛毛-_-!
話說過來,目前我們就直接使用ACCESS了:1,使用簡單;2,入門掌握容易;3,實在沒有比這個更適合初學(xué)的了。
一切還得從實際操作開始。
1,打開ACCESS數(shù)據(jù)庫,選擇新建數(shù)據(jù)庫,將其命名為cnbruce.mdb,并保存到一專門文件夾database中
2,在新建的數(shù)據(jù)庫容器中雙擊“使用設(shè)計器創(chuàng)建表”,彈出的表1窗口中字段名稱輸入“cn_id”,數(shù)據(jù)類型選擇“自動編號”,并選擇上方工具欄中的鑰匙按鈕,將該字段設(shè)為主鍵。
繼續(xù)輸入字段“cn_title”,數(shù)據(jù)類型選擇“文本”;NEXT輸入字段“cn_content”,數(shù)據(jù)類型選擇“備注”;
PS:備注和一般類型文本最大的區(qū)別就是備注允許插入的字段值相對要多些,這在插入一些較長文章的時候尤其重要。
仍然輸入字段“cn_author”,數(shù)據(jù)類型選擇“文本”;并且切換到下面“常規(guī)”中的“允許空字符串”選擇“是”。
PS:這表面允許cn_author字段的值可以是空的,這在當(dāng)提交表單,某些信息不填寫但要正確插入數(shù)據(jù)庫時,顯得很重要。
最后輸入字段“cn_time”,數(shù)據(jù)類型選擇“日期/時間”,繼續(xù)切換到“常規(guī)”中的“默認(rèn)值”輸入“now()”函數(shù)
末了,將“表1”另存為“cnarticle”
3,雙擊打開cnartile表,填寫第一行:“cn_title”輸入“test”,“cn_content”輸入“this is a test”,“cn_author”輸入“cnbruce”,時間已經(jīng)自動添加。完成!關(guān)閉表,關(guān)閉數(shù)據(jù)庫。
二,建立數(shù)據(jù)庫連接
OK,數(shù)據(jù)庫已經(jīng)建立完畢,并且已經(jīng)填寫了一行信息內(nèi)容。那么現(xiàn)在需要的就是同過ASP將該行信息顯示出來。
要想顯示,首先還是需要ASP與該數(shù)據(jù)庫文件建立連接,具體怎么建立?往下看。
1,conn.asp:主要起的是連接并打開某數(shù)據(jù)庫文件的功能。該文件建議單獨存在,并且位置是和存放數(shù)據(jù)庫的文件夾database處與同一物理層次。
|
db_path = "database/cnbruce.mdb",不用說,就是將數(shù)據(jù)庫的相對路徑賦到一個變量上,以方便下面繼續(xù)調(diào)用。
Set conn= Server.CreateObject("ADODB.Connection"),和其它建立組件一樣,建立了一個ADO連接,并用一對象conn來接受。
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path),很顯然就是連接字符串了,其包括打開數(shù)據(jù)庫的驅(qū)動方法OLEDB,和打開和哪個數(shù)據(jù)庫的連接(即數(shù)據(jù)庫的路徑)。
需要再次提醒的是:無論是FSO對文件、文件夾的操作還是ADO對數(shù)據(jù)庫的操作,對被操作文件的取得都是獲得的絕對的物理地址,一般情況之下,采用Server.MapPath方法相對較好。
conn.Open connstr最后對象conn通過連接字符串connstr打開了數(shù)據(jù)庫的連接。
三,顯示數(shù)據(jù)庫內(nèi)容
建立了數(shù)據(jù)庫,建立了和數(shù)據(jù)庫的連接,下面水到渠成地就是將數(shù)據(jù)庫中的內(nèi)容通過ASP顯示出來。
2,showit.asp
|
簡單調(diào)試本頁,不出任何意外,相信一定能將數(shù)據(jù)庫中的信息顯示出來了。(PS:我的數(shù)據(jù)庫中輸寫了兩行)
下面就來具體一個一個解釋來理解沒行的含義:
1,<!--#include file="conn.asp" --> 沒有任何爭議,主要是調(diào)用conn.asp的所起的功效,這在解釋conn.asp文件的時候已經(jīng)明白。
2,Set rs = Server.CreateObject ("ADODB.Recordset") ADO組件除了Connection連接以外,還有Recordset綁定記錄集(相信用過DW做ASP的人現(xiàn)在開始有些重回故里的感覺了)當(dāng)然 rs 可以形象地想象成數(shù)據(jù)庫表中的某一行。
3,sql = "Select * from cnarticle" 標(biāo)準(zhǔn)的SQL結(jié)構(gòu)化查詢語言。很簡單:建立了數(shù)據(jù)庫連接,也綁定了記錄集,那具體需要哪些信息呢?也就是要篩選一些記錄集合了,不過當(dāng)前采用的是無任何條件,即可以提取所有。
4,rs.Open sql,conn,1,1 真正地打開通向數(shù)據(jù)庫中記錄集的大門,具體有關(guān)后面的參數(shù)可以從如下網(wǎng)址中獲得。 http://www.cnbruce.com/blog/showlog.asp?cat_id=26&log_id=283
5,if rs.EOF and rs.BOF then 該語句里面涉及到了rs.EOF 和 rs.BOF 以及兩者的邏輯運算 and 。rs.EOF 表示到達(dá)數(shù)據(jù)庫表中的最后一行,rs.BOF 表示到達(dá)數(shù)據(jù)庫表中的第一行。整個語句可以理解為,如果當(dāng)前數(shù)據(jù)庫中的最后一行就是數(shù)據(jù)庫表中第一行,那么可以肯定:當(dāng)前數(shù)據(jù)庫表中沒有任何數(shù)據(jù)。
6,
Do Until rs.EOF
...
rs.MoveNext
Loop
主要就是一個DO LOOP 循環(huán)語句了,其中循環(huán)的結(jié)束條件為:直到rs.EOF,即值得數(shù)據(jù)庫表的最后一行。那么在這些條件滿足的許可之內(nèi),就是來顯示具體的信息了。
每次循環(huán)只能顯示數(shù)據(jù)庫表中的一行,如果要繼續(xù)讀取下行,那么 rs.MoveNext 功能真是如此。
7,rs("cn_title")等等 主要就是具體顯示記錄集中的哪個特定字段的信息值了。很是簡單。
8,最后不要忘了釋放資源空間關(guān)閉記錄集連接,關(guān)閉數(shù)據(jù)庫連接。
四,一些特殊條件
1,有沒有注意到,數(shù)據(jù)庫表信息的顯示一般是按照時間的先后排列的,也就經(jīng)常提到的按時間的升序排列。需要注意:按時間升序,并不一定每個數(shù)據(jù)庫表中都要有一個時間/日期類型的字段,只要存在一個自動編號的字段就可以了。因為該字段是永不重復(fù),并且是依次增大的。因此,按時間升序其實就是按自動編號中號碼數(shù)值的增加來進(jìn)行排序的。
當(dāng)然,問題的關(guān)鍵來了,那就是要按照時間的降序排列,即始終從最新的內(nèi)容開始顯示。那具體需要哪些手術(shù)呢?
很簡單,將連接字符串稍做修改。
由 sql = "Select * from cnarticle" 添加修改為
sql = "Select * from cnarticle order by cn_id desc"
其中 order by cn_id 即通過cn_id字段,desc 即降序了。
2,有是時候,只需要提取最前或者最新的幾條信息,那這個又具體如何操作呢?同樣還是連接字符串的修改
由 sql = "Select * from cnarticle order by cn_id desc" 添加修改為
sql = "Select top 3 * from cnarticle order by cn_id desc"
其中 top 3 就表示提取最新的三條信息內(nèi)容了。
That's All. 現(xiàn)在一個文章系統(tǒng)、新聞系統(tǒng)或者留言本顯示部分的精華內(nèi)容你已不費吹灰之力搞定。
留下你的是:文章的格式可能顯示不對勁,比如回車、空格都不顯示了,那么你就還要學(xué)會處理接受的數(shù)據(jù)庫表的值(在ASP的幾個練習(xí)中提到的);文章不能老是打開數(shù)據(jù)庫輸入信息啊,那么你就要繼續(xù)學(xué)會如何用ASP插入數(shù)據(jù)到庫表;再有就是文章多了,一個頁面看是不是很麻煩?那么你還要學(xué)會分頁技術(shù)……
要搞的太多了,后面我會詳細(xì)道來:)