加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

Oracle大文本在ASP里存取问题的解决

发布时间:2023-07-20 14:43:07 所属栏目:Asp教程 来源:
导读:在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题。   

  一、运行环境:

  1、Microsoft windows 2000
在我开发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),"<br>")
 
  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 "数据已经存入数据库中。<br>"
 
  Response.write "总计占用字符数: " & formatnumber(b,2,-2,-2,-1) & " 字<br>"
 
  Response.write "总计占用字节数: " & formatnumber(a,2,-2,-2,-1) & " Byte<br>"
 
  Response.write "<a href='view.asp'>请调阅……"
 
  '关闭数据连接。
 
  rs.close
 
  set rs=nothing
 
  Set OraSession=nothing
 
  Response.end
 
  End If
 
  %>
 
  <html>
 
  <body>
 
  <form method="POST" action="test.asp">
 
  <p>Oracle大字段在ASP中存取问题的解决:</p>
 
  <p><textarea rows="13" name="text" cols="104"></textarea></p>
 
  <p><input type="submit" value="存入" name="B1"></p>
 
  <input type="hidden" name="ok" value="1">
 
  </form>
 
  </body>
 
  </html>
 
  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<Size
 
  '关闭数据连接
 
  Set OraSession=nothing
 
  %>
 
  四、后记:
 
  因为数据类型采用的是long型,ORACLE规定long型容量<2GB,所用以上方法可以存入<2GB的大文本,但是我发现在读出的时候却只能读出最大64K的内容,也许是受ASP的限制。
 
  各位,如果您有更多的体会或更好的解决方法请来信告之。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章