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

  %>

  

  

  

  

Oracle大字段在ASP中存取问题的解决:

  

  

  

  

  

  

  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的 制约 。

  各位,假如您有更多的体味或更好的解决 步骤请来信告之 。