程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 運用C#處理lob數據類型 (Oracle)

運用C#處理lob數據類型 (Oracle)

編輯:.NET實例教程

導讀:
  
  運用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類型的空對象為EMPTY_BLOB(),之後通過SELECT命令查詢得到先前插入的記錄並鎖定,繼而將空對象修改為所要插入的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.是用C#的代碼方式
   //利用傳參數
                        OracleConnection Con = new System.Data.OracleClIEnt.OracleConnection(strCon);
                        Con.Open();
    //自己用時,替換自己的sql語句
                    string cmdText="insert into xmgl_wd(pk_wdbh,wdmc,lbbh,wdnr,wdfjdz,wdsj,istj) values (XMGL_WD_SEQ.Nextval,''"+wdmc+"'',''"+lbbh+"'',:pb,''"+wdfjdz+"'',"+str_add_wdsj+",''"+istj+"'')";
                        OracleCommand cmd = new OracleCommand(cmdText,Con);
                        OracleParameter op = new OracleParameter("pb",OracleType.Clob);
                        op.Value = wdnr;
                        cmd.Parameters.Add(op);
                        cmd.ExecuteNonQuery();
                        Con.Close();


  4.最後介紹讀取Blob數據項方式
  原代碼WebImage.rar 讀取圖片的方式比較簡單,首先把Blob從數據庫中讀取出來,接著生成圖片格式,最後輸出圖片就行。
  
  以上的方式都是試驗成功,如果哪位大蝦有更好的方式請隨時交流哦
  

本文轉自
http://www.cnblogs.com/surprise/archive/2005/06/27/182057.Html



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved