Oracle大文本在ASP中存取问题的解决 |
在我开发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 <% '表单提交 解决 部分 '-------------------------------------------------- If request("ok")=1 then '字符转换函数 function tansstr(sstr) sstr=replace(sstr," "," ") sstr=replace(sstr,chr(13) & chr(10)," tansstr=sstr end function '提交数据赋值 a=lenb(request("text")) b=len(request("text")) c=tansstr(request("text")) ' 打开数据库, 打开test数据表以Rs为记录集 Set OraSession=CreateObject("OracleInProcServer.XOraSession") Set OraDatabase=OraSession.DbOpenDatabase("autop","system/manager",0) Set rs=OraDatabase.CreateDynaset("select * from test order by id desc",0) '求ID值 if rs.eof then id=1 else id=rs("id")+1 end if '由于受SQL语句长度大小 制约所以,以非SQL语句存入数据 '-------------------------------------------------------- '新建记录 rs.DbAddNew '经典就在本句:以RS记录集的Fields对象的DbAppendChunk 步骤 解决大字段存入问题 。 rs.Fields("blob").DbAppendChunk(c) '存入ID值 rs("id")=id '刷新记录集 rs.DbUpdate
'显示 后果 部分 '--------------------------------------------------------- Response.write "数据已经存入数据库中 。 Response.write "总计占用字符数: " & formatnumber(b,2,-2,-2,-1) & " 字 Response.write "总计占用字节数: " & formatnumber(a,2,-2,-2,-1) & " Byte Response.write "请调阅……" '关闭数据衔接 。 rs.close set rs=nothing Set OraSession=nothing Response.end End If %>
2、数据调出程序:view.asp <% '衔接数据库,以只读 模式 打开数据表 Set OraSession=CreateObject("OracleInProcServer.XOraSession") Set OraDatabase=OraSession.DbOpenDatabase("autop","system/manager",0) Set Rs=OraDatabase.DbCreateDynaset("select * from test order by id desc",4) '赋初值:定义每次截取字节大小为1024byte,最大 可以设为65280byte (64K) Size=65280 I=0 Do '以Rs记录集的Fields对象的DbGetChunk 步骤在循环中读出数据 Text=Rs.Fields("Blob").DbGetChunk(I*Size,Size) Response.write Text '求出每次 存入数据的 详尽字节数 Text_Size=Lenb(Text) I=I+1 '假如每次 存入数据的 详尽字节数小于欲定义的截取字节大小则 注明该条数据已经 结束,退出循环 。 Loop until Text_Size '关闭数据衔接 Set OraSession=nothing %> 四、后记:
由于数据类型采纳的是long型,ORACLE规定long型容量<2GB,所用以上
步骤
可以存入<2GB的大文本,然而我发现在读出的时候却不得不读出最大64K的内容,
兴许是受ASP的
制约 。
各位,假如您有更多的体味或更好的解决
步骤请来信告之 。 |