在ASP中讀取ORACLE中的BLOB型別的欄位的值,不用Oracle Object for Object (轉)

amyz發表於2007-11-10
在ASP中讀取ORACLE中的BLOB型別的欄位的值,不用Oracle Object for Object (轉)[@more@]

這是第一天在CSDN上發表文件,目的是困惑了兩天的問題終於解決了,說出來,與大家共享一下,希望對遇到這樣問題的朋友有所幫助。

 

是這樣的,我們在PB中用F1,把報表以格式存貯在中,我們剛開始用一個LONG  RAW型欄位來存放EXCEL大,然後,存進去了幾個小的EXCEL,做了測試,可以把LONG RAW欄位的EXCEL大物件讀出來,然後,在中以EXCEL的格式把EXCEL檔案顯示出來。
  因為測試程式成功。所以我們開始往表中存EXCEL檔案,然後又用測試程式測試,出現了錯誤,錯誤提示是遇到末處理的資料型別,苦思明想了兩天,查了很多的資料,也沒找到原因,後來一想,是不是我們把該表調整了一下,把EXCEL大物件存在了LONG型的欄位中,後來就又把LONG型改成了LONG ROW 型,測試程式如下:


Dim conn

Dim StrConn

Dim rs

Dim
 

Set conn=Server.Create("ADO.Connection")

StrConn = "={ ODBC for oracle};server=dcmis;UID=custometable;Pwd=custometable;"

conn.Open StrConn
 

sql=" blob_excel FROM sttb_databldinfo where v_databldid = '00000001'" 

Set rs =conn.execute(sql)


Response.Buffer = TRUE

Response.ContentType = "application/vnd.ms-excel"

response.write rs("blob_excel")  'blob_excel欄位存的是EXCEL檔案

  rs.close

  set rs=nothing

  conn.close

  set conn=nothing

%>


然後存進了一個很小的EXCEL進行測試,測試又成功了!


就又存進了幾個非常大的EXCEL,這時測試又出現了錯誤!

遇到末處理的資料型別!

這是什麼原因呢?會不會是我們存的EXCEL過大?

我在測試程式中加入了以下幾行:

set field = rs("blob_excel")

fieldSize = field.ActualSize


response.write "fieldsize:"&fieldSize

response.end


進行測試,發現當存進去的EXCEL較小時,輸出的fieldsize是真實的欄位的大小,但當EXCEL較大時,輸出的fieldsize卻都是4,
終於找到了原因,原來如此,就又修改了程式,如下:

Dim conn

Dim StrConn

Dim rs

Dim Sql
 

Set conn=Server.CreateObject("ADODB.Connection")

StrConn = "driver={Microsoft ODBC for oracle};server=dcmis;UID=custometable;Pwd=custometable;"

conn.Open StrConn
 

sql="SELECT blob_excel FROM sttb_databldinfo where v_databldid = '00000001'" 

Set rs =conn.execute(sql)

 

size =32765

i=0

'set field = rs("blob_excel")

'fieldSize = field.ActualSize


'response.write "size:"&fieldSize

'response.end


dim s_stream
Do
'以Rs記錄集的Fields物件的DbGetChunk方法在迴圈中讀出資料
  text=rs.Fields("blob_excel").GetChunk(size)
  Response.binarywrite text
'求出每次取出資料的詳細位元組數
  text_size=Lenb(text)
  i=i+1
'如果每次取出資料的詳細位元組數小於欲定義的擷取位元組大小則說明該條資料已經完畢,退出迴圈。 
 
  L until text_size

Response.Buffer = TRUE

Response.ContentType = "application/vnd.ms-excel"

  rs.close

  set rs=nothing

  conn.close

  set conn=nothing

%>

這樣EXCEL就能正常顯示。

總結如下:

使用AD0資料庫連線,必須採用LONG  RAW欄位才能夠在網頁中正常顯示EXCEL大物件,而且要採用迴圈讀取大物件的方法進行。

對於BLOB欄位同樣如此,但有一點注意:,用ADO連線ORACLE資料庫,不支援BLOB,打不開含有BLOB欄位的記錄集。
必段採用OO4O連線ORACLE資料庫。BLOB存取方法同上。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章