ASP(Active Server Pages)是微軟公司為開發(fā)互聯(lián)網(wǎng)絡(luò)應(yīng)用程序所提出的工具之一,它是一種類似HTML(Hypertext Markup Language超文本標(biāo)記語言)、Script與CGI(Common Gateway Interface通用網(wǎng)關(guān)接口)的結(jié)合體,但是其運(yùn)行效率卻 比CGI更高、程序編制也比HTML更方便且更有靈活性,程序安全性及保密性遠(yuǎn)比Script好。因此ASP是目前網(wǎng)頁開發(fā)技術(shù)中 最容易學(xué)習(xí)、靈活性最大的開發(fā)工具。 ASP內(nèi)置的ADO組件是微軟公司開發(fā)的互聯(lián)網(wǎng)絡(luò)數(shù)據(jù)庫存取解決方案,也是ASP存取數(shù)據(jù)庫的重要功臣,ADO通過ODBC訪問數(shù) 據(jù)庫,從理論上講ADO能訪問各種ODBC所支持的數(shù)據(jù)庫,如Microsoft SQL Server,Access,F(xiàn)oxpro,Oracle,Dbase等, 然而在實(shí)踐中我們發(fā)現(xiàn)ADO可以完全支持Microsoft SQL Server和Acess,然而對于Oracle就有些困難了,筆者在實(shí)踐中利 用ADO訪問Oracle8,結(jié)果發(fā)現(xiàn)ADO不能訪問Oracle8的數(shù)字型字段,并且發(fā)現(xiàn)ADO訪問Oracle8的速度極慢。 為了解決利用ASP訪問Oracle8的速度及其他技術(shù)問題,筆者嘗試了利用Oracle Object for OLE訪問Oracle8,結(jié)果完全取 得了筆者預(yù)期的結(jié)果。 Oracle Object for OLE是Oracle公司為了客戶端存取數(shù)據(jù)庫所發(fā)展的一個(gè)重要的產(chǎn)品,它以Windows95/98/NT為基礎(chǔ),共 所有與OLE兼容的應(yīng)用程序訪問Oracle數(shù)據(jù)庫。它是沒有用戶界面的OLE Server,其所包含的Oracle Objects Server是ASP 訪問Oracle數(shù)據(jù)庫的重要功臣之一。 要通過Oracle Objects Server來訪問Oracle8數(shù)據(jù)庫,除了基本的Web服務(wù)器與ASP等軟件外,還必須確定Web服務(wù)器已經(jīng)安 裝了Oracle Object for OLE軟件,其所需的軟件包括:Network Protocol Adapter、Oracle Object for OLE2.X、 SQL*Net Client2.X或Oracle Net8 Client8.X、SQL*Plus及Oracle8 ODBC Driver。在確定Web服務(wù)器已安裝上述軟件后, 還必須利用SQL*Net Client2.X或Oracle Net8 Client8.X進(jìn)行數(shù)據(jù)庫的連接測試并設(shè)置數(shù)據(jù)庫別名(Database Alias)。 Oracle Objects Server共提供Oraclient、Orasession、Oraconnection、OraDatabase、OraDynaset、OraSQLstmt、 OraField、Oraparameter、Oraparameter Array等九個(gè)對象供開發(fā)者使用。其功能與作用分述如下: 1.Oraclient對象 Oraclient對象是用來定義服務(wù)器端(Client或Workstation)的范圍,Oraclient會記錄此服務(wù)器端的所有Orasession對象。 Oraclient由系統(tǒng)根據(jù)需要自動建立。 2.Orasession對象 Orasession對象用來在程序中管理Oraconnection、OraDatabase、OraDynaset等對象,其建立方法如下: Set Orasession=Create(“OracleInProcServer.Xorasession”) 3.Oraconnection對象 Oraconnection對象表示對OraDatabase對象的連接,當(dāng)需要建立OraDatabase對象時(shí),系統(tǒng)會自動產(chǎn)生一個(gè)Oraconnection 對象。反之,當(dāng)與數(shù)據(jù)庫斷開連接時(shí),Oraconnection對象自動釋放。 4.OraDatabase對象 OraDatabase對象表示對數(shù)據(jù)庫服務(wù)器的虛擬登錄,其登錄方法如下: Set Oradadabase=Orasession.Dbopendatabase_ (“數(shù)據(jù)庫別名”, “用戶名稱/密碼”,0) 5.OraDynaset對象 OraDynaset對象會將數(shù)據(jù)庫服務(wù)器符合SELECT命令的數(shù)據(jù)加以存儲在客戶端的緩沖區(qū),讓用戶瀏覽或更新,最后將結(jié)果寫 回到服務(wù)器,其方法如下: SetOraDynaset=OraDatabase.DbcreateDynaset(“SQL語句”,0) 6.OraSQLstmt對象 OraSQLstmt對象通常用來運(yùn)行SQL命令、或是調(diào)用存儲過程,其用法如下: Set Orasqlstmt=Oradatabase.createSQl(“SQL語句”,0) 7.OraField對象 OraField對象表示在OraDynaset對象中的某個(gè)字段或數(shù)據(jù)項(xiàng)目,他通過Value屬性設(shè)置或取得OraDynaset對象中的某個(gè)字段 值。 8.Oraparameter對象 Oraparameter對象表示一個(gè)在SQL命令或PL/SQL程序區(qū)塊中所附加的變量。 9.Oraparameter Array對象 Oraparameter Array對象是Oraparameter對象的數(shù)組類型,Oraparameter Array對象可以間接通過OraDatabase對象的 Oraparameter數(shù)據(jù)集合來增加、存取或刪除某個(gè)變量。 下面舉一具體例子說明如何在ASP中利用Oracle Object for OLE訪問Oracle 8。 筆者編寫了一個(gè)在ASP中利用Oracle Object for OLE2.3查詢Oracle 8.0.5數(shù)據(jù)庫,并進(jìn)行分頁顯示的程序。由于 Orasession對象的屬性中沒有控制分頁的屬性,應(yīng)此筆者自編了分頁控制的程序。 以下共兩個(gè)ASP文件(query.asp和query1.asp),query.asp文件先取得數(shù)據(jù)庫表的內(nèi)容,然后計(jì)算分頁的頁數(shù),如果頁數(shù)超 過一頁,則交由query1.asp處理,其程序代碼如下 ‘query.asp <% ‘連接數(shù)據(jù)庫 set orasession=createobject("oracleinprocserver.xorasession") set oradatabase=orasession.dbopendatabase("orant","scotter/tiger",0) ‘設(shè)置查詢條件 sql="select * from cq_hjwj " set session(oradynaset)=oradatabase.dbcreatedynaset(sql,0) ‘設(shè)置頁長 pagesize=15 if session(oradynaset).recordcount=0 then response.write "無符合條件的數(shù)據(jù)" else response.write"<h3>查詢結(jié)果</h3>" ‘計(jì)算頁數(shù) pages=int(session(oradynaset).recordcount/pagesize) if pages*pagesize=session(oradynaset).recordcount then pages=int(session(oradynaset).recordcount/pagesize) else pages=int(session(oradynaset).recordcount/pagesize)+1 end if if request("page")="" then page=1 else page=cstr(request("page")) end if response.write"共"&pages&"頁,目前第"&page&"頁" response.write"<table border=5><tr>" for i=0 to session(oradynaset).fields.count - 1 response.write"<td>" response.write session(oradynaset).fields(i).name response.write"</td>" next response.write "</tr>" startrow=(page-1)*pagesize+1 endrow=page*pagesize oradynaset.moveto startrow for j=startrow to endrow response.write"<tr>" for i=0 to session(oradynaset).fields.count - 1 response.write"<td>" response.write session(oradynaset).fields(i).value response.write"</td>" next response.write"</tr>" session(oradynaset).dbmovenext if session(oradynaset).eof then exit for next response.write"</table>" end if if page>1 then response.write "<a href='query1.asp?page=1'>第一頁</a> " response.write "<a href='query1.asp?page=" & page-1 & "'>上一頁</a> " end if if cint(page)<pages then response.write "<a href='query1.asp?page=" & page+1 & "'>下一頁</a> " response.write "<a href='query1.asp?page=" & pages & "'>最后頁</a> " end if set orasession=nothing %> <html> </html> ‘query1.asp <% ‘設(shè)置頁長 pagesize=15 if session(oradynaset).recordcount=0 then response.write "無符合條件的數(shù)據(jù)" else response.write"<h3>查詢結(jié)果</h3>" ‘計(jì)算頁數(shù) pages=int(session(oradynaset).recordcount/pagesize) if pages*pagesize=session(oradynaset).recordcount then pages=int(session(oradynaset).recordcount/pagesize) else pages=int(session(oradynaset).recordcount/pagesize)+1 end if if request("page")="" then page=1 else page=cstr(request("page")) end if response.write"共"&pages&"頁,目前第"&page&"頁" response.write"<table border=5><tr>" for i=0 to session(oradynaset).fields.count - 1 response.write"<td>" response.write session(oradynaset).fields(i).name response.write"</td>" next response.write "</tr>" startrow=(page-1)*pagesize+1 endrow=page*pagesize oradynaset.moveto startrow for j=startrow to endrow response.write"<tr>" for i=0 to session(oradynaset).fields.count - 1 response.write"<td>" response.write session(oradynaset).fields(i).value response.write"</td>" next response.write"</tr>" session(oradynaset).dbmovenext if session(oradynaset).eof then exit for next response.write"</table>" end if if page>1 then response.write "<a href='query1.asp?page=1'>第一頁</a> " response.write "<a href='query1.asp?page=" & page-1 & "'>上一頁</a> " end if if cint(page)<pages then response.write "<a href='query1.asp?page=" & page+1 & "'>下一頁</a> " response.write "<a href='query1.asp?page=" & pages & "'>最后頁</a> " end if set orasession=nothing %> <html> </html> 上述程序在Windows Nt4.0+Iss4.0上通過運(yùn)行。 由于ORACLE數(shù)據(jù)庫應(yīng)用很廣泛,市場銷售量一直占前幾位,許多企業(yè)的MIS、IT系統(tǒng)都以O(shè)RACLE數(shù)據(jù)庫作為數(shù)據(jù)存儲基礎(chǔ), 將ORACLE數(shù)據(jù)庫的信息加到網(wǎng)頁中,可以大大地豐富網(wǎng)頁發(fā)布的信息,使我們的網(wǎng)頁既能發(fā)布實(shí)時(shí)、復(fù)雜的數(shù)據(jù)庫信息, 又能接收客戶機(jī)對數(shù)據(jù)庫的修改信息。因此使用此方法能提高在Web上訪問ORACLE的效率。
|