我一直使用Oracle數(shù)據(jù)庫,現(xiàn)在需要在Web上對Oracle8數(shù)據(jù)庫進行訪問,可我發(fā)現(xiàn),在ASP中,ADO對Oracle的訪問并不順利,不但速度慢,而且還不能訪問Oracle8的數(shù)字型字段(?。┱垎栍惺裁崔k法可以實現(xiàn)對它們的順利訪問?
我們可以利用Oracle Object for
OLE所包含的Oracle Objects Server來實現(xiàn)在ASP中對Oracle
8的訪問。Oracle Objects Server共提供Oraclient、Orasession、Oraconnection、OraDatabase、OraDynaset、OraSQLstmt、OraField、Oraparameter、Oraparameter Array等九個對象供開發(fā)者使用。
Oracle Object for OLE是Oracle公司為客戶端訪問數(shù)據(jù)庫開發(fā)的一個軟件,運行在Windows95/98/NT平臺。在用Oracle Objects Server訪問Oracle8數(shù)據(jù)庫之前,我們必須在Web服務(wù)器上安裝Oracle Object for OLE,然后利用SQL+net Client2.X或Oracle net8 Client8.X進行數(shù)據(jù)庫的連接測試并設(shè)置數(shù)據(jù)庫別名。
下面舉一個在ASP中利用Oracle Object for OLE2.3查詢Oracle 8.0.5數(shù)據(jù)庫,并進行分頁顯示的程序范例。需要說明,由于Orasession對象的屬性中沒有控制分頁的屬性,本例同時使用了一個分頁控制的程序,chunfeng.asp文件先取得數(shù)據(jù)庫表的內(nèi)容,然后計算分頁的頁數(shù),如果頁數(shù)超過一頁,則交由chunfeng01.asp處理。具體代碼如下:
chunfeng.asp <% set
orasession=createobject("oracleinprocserver.xorasession") set
oradatabase=orasession.dbopendatabase("orant","scotter/tiger",0)
' 連接數(shù)據(jù)庫 sql="select * from cq_hjwj " set
session(oradynaset)=oradatabase.dbcreatedynaset(sql,0)
'設(shè) 置查詢條件 pagesize=15
' 設(shè)置頁長 if session(oradynaset).recordcount=0 then
response.write "對不起,沒有找到符合條件的數(shù)據(jù)!" else
response.write"<h3>查詢結(jié)果</h3>"
pages=int(session(oradynaset).recordcount/pagesize) if
pages*pagesize=session(oradynaset).recordcount then
pages=int(session(oradynaset).recordcount/pagesize)
' 計算頁數(shù) 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='chunfeng01.asp?page=1'>第一頁</a> " response.write "<a
href='chunfeng01.asp?page=" & page-1 & "'>上一頁</a> " end if if cint(page)<pages then
response.write "<a href='chunfeng01.asp?page=" & page+1 &
"'>下一頁</a> " response.write "<a
href='chunfeng01.asp?page=" & pages & "'>最后頁</a> " end if set orasession=nothing
%> <html> </html> chunfeng01.asp <% pagesize=15
' 設(shè)置頁長 if session(oradynaset).recordcount=0 then
response.write "對不起,沒有找到符合條件的數(shù)據(jù)!" else
response.write"<h3>查詢結(jié)果</h3>"
pages=int(session(oradynaset).recordcount/pagesize) if
pages*pagesize=session(oradynaset).recordcount then
pages=int(session(oradynaset).recordcount/pagesize)
' 計算頁數(shù) 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='chunfeng01.asp?page=1'>第一頁</a> " response.write "<a
href='chunfeng01.asp?page=" & page-1 & "'>上一頁</a> " end if if cint(page)<pages then
response.write "<a href='chunfeng01.asp?page=" & page+1 &
"'>下一頁</a> " response.write "<a
href='chunfeng01.asp?page=" & pages & "'>最后頁</a> " end if set orasession=nothing
%> <html> </html>
Oracle Objects Server提供的九個對象的功能與作用分述如下:
序號 |
對象名稱 |
作
用 |
1 |
Oraclient對象 |
用來定義服務(wù)器端(Client或Workstation)的范圍,Oraclient會記錄此服務(wù)器端的所有Orasession對象。由系統(tǒng)根據(jù)需要自動建立。 |
2 |
Orasession對象 |
用來在程序中管理Oraconnection、OraDatabase、OraDynaset等對象,其建立方法為:
Set Orasession=Create(“OracleInProcServer.Xorasession”) |
3 |
Oraconnection對象 |
表示對OraDatabase對象的連接,當(dāng)需要建立OraDatabase對象時,系統(tǒng)會自動產(chǎn)生一個Oraconnection對象。反之,當(dāng)與數(shù)據(jù)庫斷開連接時,Oraconnection對象自動釋放。 |
4 |
OraDatabase對象 |
表示對數(shù)據(jù)庫服務(wù)器的虛擬登錄,其登錄方法為:
Set Oradadabase=Orasession.Dbopendatabase_
(“數(shù)據(jù)庫別名”, “用戶名稱/密碼”,0) |
5 |
OraDynaset對象 |
將數(shù)據(jù)庫服務(wù)器符合SELECT命令的數(shù)據(jù)加以存儲在客戶端的緩沖區(qū),讓用戶瀏覽或更新,最后將結(jié)果寫回到服務(wù)器,其方法:
SetOraDynaset=OraDatabase.DbcreateDynaset(“SQL語句”,0) |
6 |
OraSQLstmt對象 |
通常用來運行SQL命令,或調(diào)用存儲過程,其用法為:
Set Orasqlstmt=Oradatabase.createSQl(“SQL語句”,0) |
7 |
OraField對象 |
表示在OraDynaset對象中的某個字段或數(shù)據(jù)項目,它通過Value屬性設(shè)置或取得OraDynaset對象中的某個字段值。 |
8 |
Oraparameter對象 |
表示一個在SQL命令或PL/SQL程序區(qū)塊中所附加的變量。 |
9 |
Oraparameter Array對象 |
是Oraparameter對象的數(shù)組類型。它可以間接通過OraDatabase對象的Oraparameter數(shù)據(jù)集合來增加、存取或刪除某個變量。 |
|