ASP基礎講座(下) |
作者:佚名 發(fā)布時(shí)間:2009-06-22 瀏覽:2470次 |
ASP基礎講座(下) 當我們需要同瀏覽器交互的時(shí)候,有時(shí)少不了數據庫。因為只有用數據庫才可能大量、快速地處理信息。使用ASP不僅意味著(zhù)你可以讀取Access和SQL Server的數據庫,同時(shí)也意味著(zhù)你可以讀取其它ODBC(Open Database Connect,開(kāi)放式數據庫互聯(lián))兼容的數據庫。為了在A(yíng)SP中訪(fǎng)問(wèn)數據庫,我們將接觸一個(gè)新名詞——ADO(Active Data Object,活動(dòng)數據對象)。 ADO是一種操作Microsoft所支持的數據庫的方法,有些類(lèi)似于以前在VB中聽(tīng)說(shuō)過(guò)的DAO(Data Access Object,數據訪(fǎng)問(wèn)對象)和RDO(Remote Data Object,遠程數據對象)。在A(yíng)SP中,ADO可以看作是一個(gè)服務(wù)器組件(Server Component),更簡(jiǎn)單點(diǎn)說(shuō),是一系列的對象,應用這些功能強大的對象,即可輕松完成對數據庫復雜的操作。在這里我們所要學(xué)的是使用這些對象的方法,具體的操作步驟可以歸納為以下幾步: (一)創(chuàng )建數據庫源名(DSN) (二)創(chuàng )建數據庫鏈接(Connection) (三)創(chuàng )建數據對象 (四)操作數據庫 (五)關(guān)閉數據對象和鏈接 下面具體敘述每一步的作法: 一、創(chuàng )建數據源名 用ODBC時(shí),經(jīng)常見(jiàn)到DSN這個(gè)名詞,它究竟是什么,有什么重要作用呢?DSN(Date Source Name)即數據源名稱(chēng)。我們知道,ODBC是一種訪(fǎng)問(wèn)數據庫的方法,只要系統中有相應的ODBC驅動(dòng)程序,任何程序就可以通過(guò)ODBC操縱驅動(dòng)程序的數據庫。比如我們系統中有Access的ODBC驅動(dòng)程序,那么即使我們沒(méi)有Access軟件,也可以在我們的程序(如VB編的)中間對一個(gè)Access的MDB數據庫加、刪、改記錄。而且我們根本不用知道這個(gè)數據庫是放在哪里的。我們只要寫(xiě)出SQL語(yǔ)句,ODBC驅動(dòng)程序就會(huì )幫我們做一切事情。我們在給ODBC驅動(dòng)程序傳SQL指令時(shí),即是用DSN來(lái)告訴它到底操作的是哪一個(gè)數據庫。如果數據庫的平臺變了,比如我們改用了SQL Server的數據庫,只要其中表的結構沒(méi)變,我們就不用改寫(xiě)我們的程序,只要重新在系統中配置DSN就行了。由此可見(jiàn),DSN是應用程序和數據庫之間的橋梁,要通過(guò)ODBC訪(fǎng)問(wèn)數據庫,前提就是我們必須配置好DSN(即架好橋梁)。一個(gè)DSN必須包含一些信息: DSN的名字:就是給這座橋取個(gè)名字,當程序訪(fǎng)問(wèn)數據庫時(shí),給系統傳的就是這個(gè)名字,而不是數據庫的實(shí)際名稱(chēng)。 ODBC驅動(dòng)程序類(lèi)型:只有指出驅動(dòng)程序類(lèi)型,在我們操作數據庫時(shí),系統才會(huì )知道調哪個(gè)ODBC驅動(dòng)程序來(lái)服務(wù)。 數據庫:你必須指定這座橋到底連接的是哪個(gè)數據庫,但不同的數據庫系統,指定數據庫名字的方法有些不同。 這座橋是架在系統之中的,所以WIN95(NT)提供了一個(gè)工具來(lái)完成這件事,即是控制面板中的32 BIT ODBC,共有三類(lèi),即用戶(hù)DSN、系統DSN、文件DSN。我們一般就用系統DSN,因為這樣可以讓所有在該系統上操作的人都能使用這個(gè)DSN。 打開(kāi)Windows的“控制面板”,找到圖標“32位ODBC)”(有一些系統上叫“ODBC”、“32bit ODBC”),雙擊,出現(如圖一)對話(huà)框,選中標簽“系統DSN”,點(diǎn)擊“新建”,選驅動(dòng)程序為Microsoft Access MDB,單擊“完成”,彈出對話(huà)框(如圖二),輸出“Data Source Name”為“dsn1”,單擊“OK”,再單擊“選擇數據庫”,選中你要使用的數據庫,例如“C:b1.mdb”,這樣就OK了。以后我們就用“dsn1”來(lái)訪(fǎng)問(wèn)數據庫“c:b1.mdb”,而不直接用文件名“C:b1.mdb”,這樣做的好處是,一旦我們改變了文件名或存放地,就不用再一個(gè)一個(gè)地修改程序中所有該數據庫的名稱(chēng),而只需修改DSN中的配置就可以了。 二、創(chuàng )數據庫鏈接(Connection) 用過(guò)VB的人都知道,DAO中有鏈接(Connection),RDO中有odo Connection。鏈接用以保持一些關(guān)于正在訪(fǎng)問(wèn)的數據的一些狀態(tài)信息,以及鏈接者信息。ASP文件中如果要訪(fǎng)問(wèn)數據,必須首先創(chuàng )建與數據庫的鏈接,其語(yǔ)法如下: set Mconn=Server createObject(“ADOBDCONNECTION”) 這條語(yǔ)句創(chuàng )建了鏈接對象mConn,接下來(lái): mConn.Open “dsn1”,“vsername”,“password” 這條語(yǔ)句打開(kāi)鏈接,用到了DSN,本例為“dsn1”。其后的兩個(gè)參數分別是訪(fǎng)問(wèn)數據庫的用戶(hù)名和口令,為可選參數。 注意:必須有以上兩個(gè)小步驟,因為鏈接對象的創(chuàng )建與打開(kāi)是兩回事,只有打開(kāi)了才真正可以用。 三、創(chuàng )建數據對象(Record Set) ADO中的數據對象通常保存的是查詢(xún)結果。Record Set是ADO中最復雜的對象,有許多屬性和方法,靈活運用,可以達到許多好的效果。與DAO中的一樣,Record Set保存的是一行行的記錄,并標有一個(gè)當前記錄。以下是創(chuàng )建方法: Set Record Set=mConn.Execute(sqtStr) 這條語(yǔ)句創(chuàng )建并打開(kāi)了對象Record Set,其中mCon是先前創(chuàng )建的鏈接對象,sqtStr是一個(gè)串,代表一條標準的SQL語(yǔ)句,例如: sqlStr=“SELECT * FROM tab1” Set Record Set=mConn.Exe cute(sqlStr) 這條語(yǔ)句執行后,對象Record Set中就保存了表tab1中的所有記錄。在A(yíng)SP文件中如何引用返回結果,本文將在文末給出一個(gè)實(shí)例說(shuō)明。 四、操作數據庫 剛才我們通過(guò)調用鏈接對象的Execute方法來(lái)將查詢(xún)結果返回給一個(gè)數據對象。我們說(shuō)Execute方法的參數是一個(gè)標準的SQL語(yǔ)句串,所以我們可以利用它方便地執行數據插入、修改、刪除等操作,例如: sqlStr=“INSERT INTO tab1 VALUES(1,2)” mConn.Execute(sqlStr) /執行插入操作 sqlStr=“UPDATE tab1 SET field1=3” mConn.Execute(sqlStr) /執行修改操作 五、關(guān)閉數據對象和鏈接對象 在使用了ADO對象之后,一定要記住關(guān)閉它,因為它使用了一定的服務(wù)器資源。通過(guò)調用方法close實(shí)現關(guān)閉,然后再釋放它。 Record Set.close Set Record Set=Nothing /關(guān)閉創(chuàng )建的數據對象 mConn.close Set mConn=Nothing /關(guān)閉創(chuàng )建的鏈接對象 至此,我們已給出了用ASP訪(fǎng)問(wèn)數據庫的全過(guò)程,包括創(chuàng )建數據源-創(chuàng )建鏈接-創(chuàng )建數據對象-操作數據對象-關(guān)閉并釋放。這其間由于應用面向對象思想,應該說(shuō)所有操作都比較簡(jiǎn)單,用戶(hù)需要注意的僅是對數據結構的了解,亦要清楚當前所操作的對象是什么,有什么屬性,等等。只要對這些有了清醒的認識,再加上ASP的強大功能,在網(wǎng)絡(luò )上應用你自己的數據庫,就再也不是什么難事了! 本文最后給出一個(gè)例子,這是基于數據庫的ASP留言簿程序,數據庫結構如下: guestbook.mdb 表lyb: xm char(100), ly char(255) , sj datetime 文件guestbook.asp: 留言簿 <% Set conn = Server.CreateObject(“ADODB.Connection”) conn.Open “l(fā)ybdsn”,“”,“” If Request(“task”)=“insert” then xm=Request(“xm”) sj = Date() sj = sj & “ ” & Hour(Time()) & “:” & Minute(Time()) If Request(“l(fā)y”)=“” then Response.write(“留言不能不輸吧”) Response.end else ly=Request(“l(fā)y”) end if sql=“INSERT INTO lyb (xm,sj,ly) VALUES ('” & xm & “','” & sj & “','” & ly & “') ” conn.execute sql End If sql = “SELECT * FROM lyb ORDER BY sj DESC” Set rs = conn.Execute(sql) %> <% On Error Resume Next rs.MoveFirst do while Not rs.eof %> 姓名:<%=Server.HTMLEncode(rs.Fields(“xm”).Value)%> 留于:<%=Server.HTMLEncode(rs.Fields(“sj”).Value)%> 留言:<%=Server.HTMLEncode(rs.Fields(“l(fā)y”).Value)%> <% rs.MoveNext loop %> |