设为首页
加入收藏夹

在ASP中利用Oracle Object for OLE访问
浏览选项:

  ASP(Active Server Pages)是微软公司为开发互联网络应用程序所提出的工具之一,它是
一种类似HTML(Hypertext Markup Language超文本标记语言)、Script与CGI(Common Gateway
Interface通用网关接口)的结合体,但是其运行效率却比CGI更高、程序编制也比HTML更方便
且更有灵活性,程序安全性及保密性远比Script好。因此ASP是目前网页开发技术中最容易学
  ASP内置的ADO组件是微软公司开发的互联网络数据库存取解决方案,也是ASP存取数据库
的重要功臣,ADO通过ODBC访问数据库,从理论上讲ADO能访问各种ODBC所支持的数据库,如
Microsoft SQL Server,Access,Foxpro,Oracle,Dbase等,然而在实践中我们发现ADO可
以完全支持Microsoft SQL Server和Acess,然而对于Oracle就有些困难了,笔者在实践中利
用ADO访问Oracle8,结果发现ADO不能访问Oracle8的数字型字段,并且发现ADO访问Oracle8的
  为了解决利用ASP访问Oracle8的速度及其他技术问题,笔者尝试了利用Oracle Object
  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进行数据库的连接测试并设置数据库别
  Oracle Objects Server共提供Oraclient、Orasession、Oraconnection、OraDatabase、
OraDynaset、OraSQLstmt、OraField、Oraparameter、Oraparameter Array等九个对象供开发
  1.Oraclient对象
  Oraclient对象是用来定义服务器端(Client或Workstation)的范围,Oraclient会记录此
服务器端的所有Orasession对象。Oraclient由系统根据需要自动建立。
  2.Orasession对象
  Orasession对象用来在程序中管理Oraconnection、OraDatabase、OraDynaset等对象,其
  Set Orasession=Create(“OracleInProcServer.Xorasession”)
  3.Oraconnection对象
  Oraconnection对象表示对OraDatabase对象的连接,当需要建立OraDatabase对象时,
系统会自动产生一个Oraconnection对象。反之,当与数据库断开连接时,Oraconnection对
  4.OraDatabase对象
  OraDatabase对象表示对数据库服务器的虚拟登录,其登录方法如下:
  Set Oradadabase=Orasession.Dbopendatabase_
  (“数据库别名”, “用户名称/密码”,0)
  5.OraDynaset对象
  OraDynaset对象会将数据库服务器符合SELECT命令的数据加以存储在客户端的缓冲区,让
用户浏览或更新,最后将结果写回到服务器,其方法如下:
  SetOraDynaset=OraDatabase.DbcreateDynaset(“SQL语句”,0)
  6.OraSQLstmt对象
  OraSQLstmt对象通常用来运行SQL命令、或是调用存储过程,其用法如下:
  Set Orasqlstmt=Oradatabase.createSQl(“SQL语句”,0)
  7.OraField对象
  OraField对象表示在OraDynaset对象中的某个字段或数据项目,他通过Value属性设置或
  8.Oraparameter对象
  Oraparameter对象表示一个在SQL命令或PL/SQL程序区块中所附加的变量。
  9.Oraparameter Array对象
  Oraparameter Array对象是Oraparameter对象的数组类型,Oraparameter Array对象可以
间接通过OraDatabase对象的Oraparameter数据集合来增加、存取或删除某个变量。
  ?
  下面举一具体例子说明如何在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 session(oradynaset).fields(i).name
  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 session(oradynaset).fields(i).value
  response.write" "
  next   response.write""
  session(oradynaset).dbmovenext
  if session(oradynaset).eof then exit for

  next   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 session(oradynaset).fields(i).name
  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""
  session(oradynaset).dbmovenext
  if session(oradynaset).eof then exit for
  next   response.write"
"
  response.write session(oradynaset).fields(i).value
  response.write" "
  next   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上通过运行。
  由于ORACLE数据库应用很广泛,市场销售量一直占前几位,许多企业的MIS、IT系统都以
ORACLE数据库作为数据存储基础,将ORACLE数据库的信息加到网页中,可以大大地丰富网页发
布的信息,使我们的网页既能发布实时、复杂的数据库信息,又能接收客户机对数据库的修改
信息。因此使用此方法能提高在Web上访问ORACLE的效率。



Copyright © 2004 wanxu.com All Rights Reserved