Chinaunix首页 | 论坛 | 博客
  • 博客访问: 458023
  • 博文数量: 711
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 4200
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 14:18
文章分类

全部博文(711)

文章存档

2011年(1)

2008年(710)

我的朋友

分类:

2008-10-29 11:56:20


  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,,Dbase等,然而在实践中我们发现ADO可以完全支持Microsoft SQL Server和Acess,然而对于就有些困难了,笔者在实践中利用ADO访问Oracle8,结果发现ADO不能访问Oracle8的数字型字段,并且发现ADO访问Oracle8的速度极慢。

为了解决利用ASP访问Oracle8的速度及其他技术问题,笔者尝试了利用Oracle Object for OLE访问Oracle8,结果完全取得了笔者预期的结果。

Oracle Object for OLE是Oracle公司为了客户端存取数据库所发展的一个重要的产品,它以95/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等九个对象供开发者使用。其功能与作用分述如下:

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属性设置或取得OraDynaset对象中的某个字段值。

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"

"

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

%>

【责编:admin】
--------------------next---------------------


阅读(384) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~