点击这里给我发消息 点击这里给我发消息

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

添加时间:2014-9-4
    相关阅读: ASP 开发 数据库 程序 SQL Oracle

在我开发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的限制。

  各位,如果您有更多的体会或更好的解决方法请来信告之。

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册