在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题。
一、运行环境:
1、Microsoft Windows 2000 Server + IIS 5.0
2、Oracle8i中文标准版
二、建立数据表:
CREATE TABLE SYSTEM.TEST(
BLOB LONG,
ID NUMBER)
/
三、源程序:
1、数据存入程序:test.asp
1
2'表单提交处理部分
3'--------------------------------------------------
4
5If request("ok")=1 then
6
7'字符转换函数
8function tansstr(sstr)
9sstr=replace(sstr," "," ")
10sstr=replace(sstr,chr(13) & chr(10),"
<br/>
1")
2tansstr=sstr
3end function
4
5'提交数据赋值
6a=lenb(request("text"))
7b=len(request("text"))
8c=tansstr(request("text"))
9
10'打开数据库,打开test数据表以Rs为记录集
11Set OraSession=CreateObject("OracleInProcServer.XOraSession")
12Set OraDatabase=OraSession.DbOpenDatabase("autop","system/manager",0)
13Set rs=OraDatabase.CreateDynaset("select * from test order by id desc",0)
14
15'求ID值
16if rs.eof then
17id=1
18else
19id=rs("id")+1
20end if
21
22'因为受SQL语句长度大小限制所以,以非SQL语句存入数据
23'--------------------------------------------------------
24
25'新建记录
26rs.DbAddNew
27
28'经典就在本句:以RS记录集的Fields对象的DbAppendChunk方法处理大字段存入问题。
29rs.Fields("blob").DbAppendChunk(c)
30
31'存入ID值
32rs("id")=id
33
34'刷新记录集
35rs.DbUpdate
36
37
38'显示结果部分
39'---------------------------------------------------------
40Response.write "数据已经存入数据库中。
<br/>
1"
2Response.write "总计占用字符数:
<font color="blue">" & formatnumber(b,2,-2,-2,-1) & "</font>
1字
<br/>
1"
2Response.write "总计占用字节数:
<font color="blue">" & formatnumber(a,2,-2,-2,-1) & "</font>
1Byte
<br/>
1"
2Response.write "
<a href="view.asp">请调阅……</a>
1"
2
3'关闭数据连接。
4rs.close
5set rs=nothing
6Set OraSession=nothing
7Response.end
8End If
1<html>
2<body>
3<form action="test.asp" method="POST">
4<p><font color="#FF0000"><b>Oracle大字段在ASP中存取问题的解决:</b></font></p>
5<p><textarea cols="104" name="text" rows="13"></textarea></p>
6<p><input name="B1" type="submit" value="存入"/></p>
7<input name="ok" type="hidden" value="1"/>
8</form>
9</body>
10</html>
2、数据调出程序:view.asp
1
2
3'连接数据库,以只读方式打开数据表
4Set OraSession=CreateObject("OracleInProcServer.XOraSession")
5Set OraDatabase=OraSession.DbOpenDatabase("autop","system/manager",0)
6Set Rs=OraDatabase.DbCreateDynaset("select * from test order by id desc",4)
7
8'赋初值:定义每次截取字节大小为1024byte,最大可以设为65280byte (64K)
9Size=65280
10I=0
11
12Do
13'以Rs记录集的Fields对象的DbGetChunk方法在循环中读出数据
14Text=Rs.Fields("Blob").DbGetChunk(I*Size,Size)
15
16Response.write Text
17
18'求出每次取出数据的详细字节数
19Text_Size=Lenb(Text)
20
21I=I+1
22
23'如果每次取出数据的详细字节数小于欲定义的截取字节大小则说明该条数据已经完毕,退出循环。
24Loop until Text_Size<Size
25
26'关闭数据连接
27Set OraSession=nothing
28