程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 用Oracle Object for OLE訪問Oracle

用Oracle Object for OLE訪問Oracle

編輯:Oracle數據庫基礎

ASP內置的ADO組件是微軟公司開發的互聯網絡數據庫存取解決方案,ADO通過ODBC訪問數據庫。

從理論上講ADO能訪問各種ODBC所支持的數據庫,然而對於Oracle就有些困難了,筆者在實踐中利用ADO訪問Oracle8,結果發現ADO不能訪問Oracle8的數字型字段,並且發現ADO訪問Oracle8的速度極慢。為了解決利用ASP訪問Oracle8的速度及其他技術問題,筆者嘗試了利用Oracle Object for OLE訪問Oracle8,結果完全取得了筆者預期的結果。

Oracle Object for OLE是Oracle公司為了客戶端存取數據庫所發展的一個重要的產品,它以Windows95/98/NT為基礎,共所有與OLE兼容的應用程序訪問Oracle數據庫。它是沒有用戶界面的OLE Server,其所包含的Oracle Objects Server是ASP訪問Oracle數據庫的重要功臣之一。

要通過Oracle Objects Server來訪問Oracle8數據庫,除了基本的Web服務器與ASP等軟件外,還必須確定Web服務器已經安裝了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服務器已安裝上述軟件後,還必須利用SQL*Net ClIEnt2.X或Oracle Net8 ClIEnt8.X進行數據庫的連接測試並設置數據庫別名(Database Alias)。 Oracle Objects Server共提供Oraclient、Orasession、Oraconnection、OraDatabase、OraDynaset、OraSQLstmt、OraFIEld、Oraparameter、Oraparameter Array等九個對象供開發者使用。

下面舉一具體例子說明如何在ASP中利用Oracle Object for OLE訪問Oracle 8。

筆者編寫了一個在ASP中利用Oracle Object for OLE2.3查詢Oracle 8.0.5數據庫,並進行分頁顯示的程序。由於Orasession對象的屬性中沒有控制分頁的屬性,應此筆者自編了分頁控制的程序。

以下共兩個ASP文件(query.asp和query1.asp),query.ASP文件先取得數據庫表的內容,然後計算分頁的頁數,如果頁數超過一頁,則交由query1.ASP處理,其程序代碼如下:

"query.ASP 

<%

‘連接數據庫

set orasession=createobject("Oracleinprocserver.xorasession")

set oradatabase=orasession.dbopendatabase("orant","scotter/tiger",0)

‘設置查詢條件

sql="select * from cq_hjwj "

set session(oradynaset)=oradatabase.dbcreatedynaset(sql,0)

‘設置頁長

pagesize=15

if session(oradynaset).recordcount=0 then

response.write "無符合條件的數據"

else

response.write"<h3>查詢結果</h3>"

‘計算頁數

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

<%

‘設置頁長

pagesize=15

if session(oradynaset).recordcount=0 then

response.write "無符合條件的數據"

else

response.write"<h3>查詢結果</h3>"

‘計算頁數

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上通過運行,此方法能提高在Web上訪問Oracle的效率。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved