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 ServerAccessFoxproOracleDbase等然而在实践中我们发现ADO可以完全支持Microsoft SQL Server和Acess然而对于Oracle就有些困难了笔者在实践中利用ADO访问Oracle结果发现ADO不能访问Oracle的数字型字段并且发现ADO访问Oracle的速度极慢 为了解决利用ASP访问Oracle的速度及其他技术问题笔者尝试了利用Oracle Object for OLE访问Oracle结果完全取得了笔者预期的结果 Oracle Object for OLE是Oracle公司为了客户端存取数据库所发展的一个重要的产品它以Windows//NT为基础共所有与OLE兼容的应用程序访问Oracle数据库它是没有用户界面的OLE Server其所包含的Oracle Objects Server是ASP访问Oracle数据库的重要功臣之一 要通过Oracle Objects Server来访问Oracle数据库除了基本的Web服务器与ASP等软件外还必须确定Web服务器已经安装了Oracle Object for OLE软件其所需的软件包括Network Protocol AdapterOracle Object for OLEXSQL*Net ClientX或Oracle Net ClientXSQL*Plus及Oracle ODBC Driver在确定Web服务器已安装上述软件后还必须利用SQL*Net ClientX或Oracle Net ClientX进行数据库的连接测试并设置数据库别名(Database Alias) Oracle Objects Server共提供OraclientOrasessionOraconnectionOraDatabaseOraDynasetOraSQLstmtOraFieldOraparameterOraparameter Array等九个对象供开发者使用其功能与作用分述如下 .Oraclient对象 Oraclient对象是用来定义服务器端(Client或Workstation)的范围Oraclient会记录此服务器端的所有Orasession对象Oraclient由系统根据需要自动建立 .Orasession对象 Orasession对象用来在程序中管理OraconnectionOraDatabaseOraDynaset等对象其建立方法如下 Set Orasession=Create(OracleInProcServerXorasession) .Oraconnection对象 Oraconnection对象表示对OraDatabase对象的连接当需要建立OraDatabase对象时系统会自动产生一个Oraconnection对象反之当与数据库断开连接时Oraconnection对象自动释放 .OraDatabase对象 OraDatabase对象表示对数据库服务器的虚拟登录其登录方法如下 Set Oradadabase=OrasessionDbopendatabase_ (数据库别名 用户名称/密码) .OraDynaset对象 OraDynaset对象会将数据库服务器符合SELECT命令的数据加以存储在客户端的缓沖区让用户浏览或更新最后将结果写回到服务器其方法如下 SetOraDynaset=OraDatabaseDbcreateDynaset(SQL语句) .OraSQLstmt对象 OraSQLstmt对象通常用来运行SQL命令或是调用存储过程其用法如下 Set Orasqlstmt=OradatabasecreateSQl(SQL语句) .OraField对象 OraField对象表示在OraDynaset对象中的某个字段或数据项目他通过Value属性设置或取得OraDynaset对象中的某个字段值 .Oraparameter对象 Oraparameter对象表示一个在SQL命令或PL/SQL程序区块中所附加的变量 .Oraparameter Array对象 Oraparameter Array对象是Oraparameter对象的数组类型Oraparameter Array对象可以间接通过OraDatabase对象的Oraparameter数据集合来增加存取或删除某个变量 下面举一具体例子说明如何在ASP中利用Oracle Object for OLE访问Oracle 笔者编写了一个在ASP中利用Oracle Object for OLE查询Oracle 数据库并进行分页显示的程序由于Orasession对象的属性中没有控制分页的属性应此笔者自编了分页控制的程序 以下共两个ASP文件(queryasp和queryasp)queryasp文件先取得数据库表的内容然后计算分页的页数如果页数超过一页则交由queryasp处理其程序代码如下 queryasp <% ‘连接数据库 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)unt - 1 response.write"" 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)unt - 1 response.write"" 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> then responsewrite 第一页 responsewrite 上一页 end if if cint(page) responsewrite 下一页 responsewrite 最后页 end if set orasession=nothing %> queryasp <% 设置页长 pagesize= if session(oradynaset)recordcount= then responsewrite 无符合条件的数据 else responsewrite查询结果 计算页数 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)+ end if if request(page)= then page= else page=cstr(request(page)) end if responsewrite共&pages&页目前第&page&页 responsewrite for i= to session(oradynaset)unt responsewrite responsewrite session(oradynaset)fields(i)name responsewrite next responsewrite startrow=(page)*pagesize+ endrow=page*pagesize oradynasetmoveto startrow for j=startrow to endrow responsewrite for i= to session(oradynaset)unt responsewrite responsewrite session(oradynaset)fields(i)value responsewrite next responsewrite session(oradynaset)dbmovenext if session(oradynaset)eof then exit for next responsewrite end if if page> then responsewrite 第一页 responsewrite 上一页 end if if cint(page) responsewrite 下一页 responsewrite 最后页 end if set orasession=nothing %>