您的位置:首页 > 数据库 > Oracle

运用C#处理lob数据类型 (Oracle)

2005-06-27 15:47 357 查看
运用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对象。

⑴ 调用储存过程方式

/article/4956129.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#中的代码部分与

/article/4956129.html雷同,在这里就不必多说了

优点:无论多大的图片都能处理,速度上也非常快

缺点:只能存储数据库本地的图片

⑶ 不用储存过程的方式

原代码ConsoleApplication2.rar (推荐,在我们公司项目中就用到了)

优点:解决了所有以上的缺点

缺点:破坏了项目的层次感

3.最后介绍读取Blob数据项方式

原代码WebImage.rar 读取图片的方式比较简单,首先把Blob从数据库中读取出来,接着生成图片格式,最后输出图片就行。

以上的方式都是试验成功,如果哪位大虾有更好的方式请随时交流哦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: