运用C#处理lob数据类型 (Oracle)
2009-07-15 15:13
507 查看
运用
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
从数据库中读取出来,接着生成图片格式,最后输出图片就行。
以上的方式都是试验成功,如果哪位大虾有更好的方式请随时交流哦
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
从数据库中读取出来,接着生成图片格式,最后输出图片就行。
以上的方式都是试验成功,如果哪位大虾有更好的方式请随时交流哦
相关文章推荐
- 运用C#处理lob数据类型 (Oracle)
- 运用C#处理lob数据类型 (Oracle)
- 运用C#处理lob数据类型 (Oracle)
- 【转】 运用C#处理lob数据类型 (Oracle)
- 运用C#处理lob数据类型 (Oracle)
- Oracle中的LOB数据类型以及ibatis中处理该类型的typeHandler
- Oracle中的LOB数据类型以及ibatis中处理该类型的typeHandler
- Oracle中的LOB类型处理
- lob类型数据处理 java.lang.IllegalStateException: No LobHandler found for configuration
- Oracle LOB数据类型
- 用python读取oracle的clob类型数据的处理
- 用PHP操纵Oracle的LOB类型的数据
- C#读取Oracle中DATE类型的值,数据表中为空时,怎么去读?
- C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
- 【C#食谱】【风味小吃】菜单4 对各种数据类型运用位运算符求补运算符
- 【转】hibernate oracle blob数据类型的处理
- 解决oracle中lob数据类型查询问题
- ODI Oracle Lob类型的处理
- Oracle LOB数据类型专题
- Oracle中对number类型数据to_char()出现各位少0,或者值为###的处理