Oracle大文本在ASP中存取问题的解决
2018-09-06 11:03
在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题。
一、运行环境:
1、MicrosoftWindows2000Server+IIS5.0
2、Oracle8i中文标准版
二、建立数据表:
CREATETABLESYSTEM.TEST(
BLOBLONG,
IDNUMBER)
/
三、源程序:
1、数据存入程序:test.asp
<%
’表单提交处理部分
’--------------------------------------------------
Ifrequest(ok)=1then
’字符转换函数
functiontansstr(sstr)
sstr=replace(sstr,,nbsp;)
sstr=replace(sstr,chr(13)chr(10),<br>)
tansstr=sstr
endfunction
’提交数据赋值
a=lenb(request(text))
b=len(request(text))
c=tansstr(request(text))
’打开数据库,打开test数据表以Rs为记录集
SetOraSession=CreateObject(OracleInProcServer.XOraSession)
SetOraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Setrs=OraDatabase.CreateDynaset(select*fromtestorderbyiddesc,0)
’求ID值
ifrs.eofthen
id=1
else
id=rs(id)+1
endif
’因为受SQL语句长度大小限制所以,以非SQL语句存入数据
’--------------------------------------------------------
’新建记录
rs.DbAddNew
’经典就在本句:以RS记录集的Fields对象的DbAppendChunk方法处理大字段存入问题。
rs.Fields(blob).DbAppendChunk(c)
’存入ID值
rs(id)=id
’刷新记录集
rs.DbUpdate
’显示结果部分
’---------------------------------------------------------
Response.write数据已经存入数据库中。<br>
Response.write总计占用字符数:<fontcolor=blue>formatnumber(b,2,-2,-2,-1)</font>字<br>
Response.write总计占用字节数:<fontcolor=blue>formatnumber(a,2,-2,-2,-1)</font>Byte<br>
Response.write<ahref=’view.asp’>请调阅……</a>
’关闭数据连接。
rs.close
setrs=nothing
SetOraSession=nothing
Response.end
EndIf
%>
<html>
<body>
<formmethod=POSTaction=test.asp>
<p><fontcolor=#FF0000><b>Oracle大字段在ASP中存取问题的解决:</b></font></p>
<p><textarearows=13name=textcols=104></textarea></p>
<p><inputtype=submitvalue=存入name=B1></p>
<inputtype=hiddenname=okvalue=1>
</form>
</body>
</html>
2、数据调出程序:view.asp
<%
’连接数据库,以只读方式打开数据表
SetOraSession=CreateObject(OracleInProcServer.XOraSession)
SetOraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
SetRs=OraDatabase.DbCreateDynaset(select*fromtestorderbyiddesc,4)
’赋初值:定义每次截取字节大小为1024byte,最大可以设为65280byte(64K)
Size=65280
I=0
Do
’以Rs记录集的Fields对象的DbGetChunk方法在循环中读出数据
Text=Rs.Fields(Blob).DbGetChunk(I*Size,Size)
Response.writeText
’求出每次取出数据的详细字节数
Text_Size=Lenb(Text)
I=I+1
’如果每次取出数据的详细字节数小于欲定义的截取字节大小则说明该条数据已经完毕,退出循环。
LoopuntilText_Size<Size
’关闭数据连接
SetOraSession=nothing
%>