我一直使用Oracle数据库,现在需要在Web上对Oracle8数据库进行访问,可我发现,在ASP中,ADO对Oracle的访问并不顺利,不但速度慢,而且还不能访问Oracle8的数字型字段(!)请问有什么办法可以实现对它们的顺利访问?
我们可以利用Oracle Object for
OLE所包含的Oracle Objects Server来实现在ASP中对Oracle
8的访问。Oracle Objects Server共提供Oraclient、Orasession、Oraconnection、OraDatabase、OraDynaset、OraSQLstmt、OraField、Oraparameter、Oraparameter Array等九个对象供开发者使用。
Oracle Object for OLE是Oracle公司为客户端访问数据库开发的一个软件,运行在Windows95/98/NT平台。在用Oracle Objects Server访问Oracle8数据库之前,我们必须在Web服务器上安装Oracle Object for OLE,然后利用SQL+net Client2.X或Oracle net8 Client8.X进行数据库的连接测试并设置数据库别名。
下面举一个在ASP中利用Oracle Object for OLE2.3查询Oracle 8.0.5数据库,并进行分页显示的程序范例。需要说明,由于Orasession对象的属性中没有控制分页的属性,本例同时使用了一个分页控制的程序,chunfeng.asp文件先取得数据库表的内容,然后计算分页的页数,如果页数超过一页,则交由chunfeng01.asp处理。具体代码如下:
chunfeng.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='chunfeng01.asp?page=1'>第一页</a> " response.write "<a
href='chunfeng01.asp?page=" & page-1 & "'>上一页</a> " end if if cint(page)<pages then
response.write "<a href='chunfeng01.asp?page=" & page+1 &
"'>下一页</a> " response.write "<a
href='chunfeng01.asp?page=" & pages & "'>最后页</a> " end if set orasession=nothing
%> <html> </html> chunfeng01.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='chunfeng01.asp?page=1'>第一页</a> " response.write "<a
href='chunfeng01.asp?page=" & page-1 & "'>上一页</a> " end if if cint(page)<pages then
response.write "<a href='chunfeng01.asp?page=" & page+1 &
"'>下一页</a> " response.write "<a
href='chunfeng01.asp?page=" & pages & "'>最后页</a> " end if set orasession=nothing
%> <html> </html>
Oracle Objects Server提供的九个对象的功能与作用分述如下:
序号 |
对象名称 |
作
用 |
1 |
Oraclient对象 |
用来定义服务器端(Client或Workstation)的范围,Oraclient会记录此服务器端的所有Orasession对象。由系统根据需要自动建立。 |
2 |
Orasession对象 |
用来在程序中管理Oraconnection、OraDatabase、OraDynaset等对象,其建立方法为:
Set Orasession=Create(“OracleInProcServer.Xorasession”) |
3 |
Oraconnection对象 |
表示对OraDatabase对象的连接,当需要建立OraDatabase对象时,系统会自动产生一个Oraconnection对象。反之,当与数据库断开连接时,Oraconnection对象自动释放。 |
4 |
OraDatabase对象 |
表示对数据库服务器的虚拟登录,其登录方法为:
Set Oradadabase=Orasession.Dbopendatabase_
(“数据库别名”, “用户名称/密码”,0) |
5 |
OraDynaset对象 |
将数据库服务器符合SELECT命令的数据加以存储在客户端的缓冲区,让用户浏览或更新,最后将结果写回到服务器,其方法:
SetOraDynaset=OraDatabase.DbcreateDynaset(“SQL语句”,0) |
6 |
OraSQLstmt对象 |
通常用来运行SQL命令,或调用存储过程,其用法为:
Set Orasqlstmt=Oradatabase.createSQl(“SQL语句”,0) |
7 |
OraField对象 |
表示在OraDynaset对象中的某个字段或数据项目,它通过Value属性设置或取得OraDynaset对象中的某个字段值。 |
8 |
Oraparameter对象 |
表示一个在SQL命令或PL/SQL程序区块中所附加的变量。 |
9 |
Oraparameter Array对象 |
是Oraparameter对象的数组类型。它可以间接通过OraDatabase对象的Oraparameter数据集合来增加、存取或删除某个变量。 |
|