運用C#處理lob資料類型 (Oracle)

來源:互聯網
上載者:User
 

運用C#處理lob資料類型 Oracle

一、           介紹不規則資料類型

隨著媒體技術的進步,人們的要求也越來越多,因此現在的資料庫中不單單儲存簡單的資料類型,還可以儲存圖片、檔案、聲音等非常龐大的位元據,我們把這種不規則資料類型叫做LOB(Large Object)。對於LOB資料即可以儲存50K還可以儲存50M的位元據內容。

Oracle資料庫中,大型資料類型有以下幾種:

Clob: 和long型相似,clob可以儲存單位元組型資料

Nclob: Nclob儲存定寬的多位元組國家字元集資料

Blob:可以儲存無結構的位元據片

Bfile: Bfile允許對Oracle資料庫以外儲存的大型二進位檔案進行唯讀形式的訪問。和其它三種lob類型資料 不同的是,bfile類型資料存放區在一個單獨的檔案中,該檔案不由Oracle來維護。

在這裡主要介紹運用C#儲存和讀取圖片(資料庫Oracle)。

二、           處理Blob資料項目的方式

1.首先介紹資料表結構

表:student

欄位名                                       類型                                   說明

STUDENTID                             number                         id關鍵字段

SNAME                                     varchar2(50)                 姓名

SPHOTO                                    Blob                             圖片

定義了序列SEQ_STUDENT_ID

 

2.接著介紹儲存Blob資料項目方式

注意:Blob資料不能象其它類型資料一樣直接插入(INSERT)。插入前必須先插入一個空的Blob對象,BLOB類型的Null 物件為EMPTY_BLOB(),之後通過SELECT命令查詢得到先前插入的記錄並鎖定,繼而將Null 物件修改為所要插入的Blob對象。

⑴ 調用儲存過程方式

       http://www.cnblogs.com/surprise/archive/2005/04/19/140461.html

       優點:層次清晰明了,儲存速度快

       缺點:運用dbms_lob包用dbms_lob.write()寫入只能儲存32k以下的圖片

⑵ 另一種調用儲存過程方式

       在Oracle中寫預存程序如下:

       create or replace procedure update_student_clob (

              id in number,

              file_name in varchar2)

       is

              b_lob  BLOB;

              f_lob   BFILE;

       BEGIN

              --首先把SPHOTO資料插入空值

              Update student set SPHOTO=empty_blob() where STUDENTID=id;

        --通過SELECT命令查詢得到先前插入的記錄並鎖定

        SELECT SPHOTO INTO b_lob from student where STUDENTID=id for update;

        --讀取圖片檔案對象

        f_lob:=bfilename(‘bb_images’, file_name);

              --開啟圖片檔案對象

              dbms_lob.fileopen(f_lob,dbms_lob.file_readonly);

              --把圖片檔案對象寫入Blob資料中

              dbms_lob.loadfromfile(b_lob,f_lob,dbms_lob.getlength(f_lob));

              dbms_lob.fileclose(f_lob);

       END;

/

其中:id代表關鍵字段id,file_name代表檔案名稱 

       bb_images代表目錄對象,目錄對象建立如下

       create directory bb_images as ‘d:\kk’;

在C#中的代碼部分與

http://www.cnblogs.com/surprise/archive/2005/04/19/140461.html雷同,在這裡就不必多說了

       優點:無論多大的圖片都能處理,速度上也非常快

       缺點:只能儲存資料庫本地的圖片

⑶ 不用儲存過程的方式

       原代碼ConsoleApplication2.rar  (推薦,在我們公司項目中就用到了)

優點:解決了所有以上的缺點

缺點:破壞了項目的層次感

 

3.最後介紹讀取Blob資料項目方式

       原代碼WebImage.rar       讀取圖片的方式比較簡單,首先把Blob從資料庫中讀取出來,接著產生圖片格式,最後輸出圖片就行。

 

以上的方式都是實驗成功,如果哪位大蝦有更好的方式請隨時交流哦

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.