欢迎投稿

今日深度:

用Oracle Object for OLE访问Oracle

用Oracle Object for OLE访问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"

查询结果

"
‘计算页数
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""
for i=0 to session(oradynaset).fields.count - 1
response.write""
next
response.write ""
startrow=(page-1)*pagesize+1
endrow=page*pagesize
oradynaset.moveto startrow
for j=startrow to endrow
response.write""
for i=0 to session(oradynaset).fields.count - 1
response.write""
next
response.write""
session(oradynaset).dbmovenext
if session(oradynaset).eof then exit for
next
response.write"
"
response.write session(oradynaset).fields(i).name
response.write"
"
response.write session(oradynaset).fields(i).value
response.write"
"
end if
if page>1 then
response.write "第一页  "
response.write "上一页  "
end if
if cint(page)response.write "下一页  "
response.write "最后页  "
end if
set orasession=nothing
%>


"query1.asp
<%
‘设置页长
pagesize=15
if session(oradynaset).recordcount=0 then
response.write "无符合条件的数据"
else
response.write"

查询结果

"
‘计算页数
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""
for i=0 to session(oradynaset).fields.count - 1
response.write""
next
response.write ""
startrow=(page-1)*pagesize+1
endrow=page*pagesize
oradynaset.moveto startrow
for j=startrow to endrow
response.write""
for i=0 to session(oradynaset).fields.count - 1
response.write""
next
response.write""
session(oradynaset).dbmovenext
if session(oradynaset).eof then exit for
next
response.write"
"
response.write session(oradynaset).fields(i).name
response.write"
"
response.write session(oradynaset).fields(i).value
response.write"
"
end if
if page>1 then
response.write "第一页  "
response.write "上一页  "
end if
if cint(page)response.write "下一页  "
response.write "最后页  "
end if
set orasession=nothing
%>

 

上述程序在Windows Nt4.0+Iss4.0上通过运行,此方法能提高在Web上访问ORACLE的效率。


www.htsjk.Com true http://www.htsjk.com/shujukukf/17643.html NewsArticle 用Oracle Object for OLE访问Oracle ASP内置的ADO组件是微软公司开发的互联网络数据库存取解决方案,ADO通过ODBC访问数据库。 从理论上讲ADO能访问各种ODBC所支持的数据库,然而对于Oracle就有些...
评论暂时关闭