C#在Oracle中存储图片,需要先将图片转化为byte[],在转化为OracleLob对象,最后传入存储过程中。
图片的流转化参见下文:
【转】http://www.cnblogs.com/noahsky/archive/2010/01/28/1658379.html
公司的存储过程:
1 PROCEDURE sp_ins_fwpmt ( 2 ib_tp IN BLOB := NULL, 3 is_lzid IN VARCHAR2, 4 is_flmc IN VARCHAR2, 5 os_pmtbh OUT VARCHAR2, 6 os_return OUT INTEGER, 7 os_errorinf OUT VARCHAR2 8 ) 9 AS 10 oc_cursor t_cursor; 11 bufferblob BLOB; 12 s_pmtbh VARCHAR2 (10); 13 v_bufferblob blob; 14 BEGIN 15 --初始化 16 os_return := -1; 17 os_errorinf := ''; 18 --获取新的图片编号 19 sp_get_tpbh (s_pmtbh, os_return, os_errorinf); 20 21 IF os_return = -1 22 THEN 23 os_errorinf := '获取图片编号错误' || os_errorinf; 24 RETURN; 25 END IF; 26 27 os_return := -1; 28 29 INSERT INTO yw_fwpmt 30 (tpbh, lzid, tpflmc, fwpmt, xgsj 31 ) 32 VALUES (s_pmtbh, is_lzid, is_flmc, EMPTY_BLOB (), SYSDATE 33 ); 34 35 SELECT fwpmt 36 INTO bufferblob 37 FROM yw_fwpmt 38 WHERE tpbh = s_pmtbh 39 FOR UPDATE; 40 41 DBMS_LOB.COPY (bufferblob, ib_tp, DBMS_LOB.getlength (ib_tp)); 42 43 if ib_tp is not null then 44 v_bufferblob := ib_tp; 45 DBMS_LOB.freetemporary(v_bufferblob); 46 end if; 47 48 COMMIT; 49 os_pmtbh := s_pmtbh; 50 os_return := 0; 51 52 EXCEPTION 53 WHEN OTHERS 54 THEN 55 ROLLBACK; 56 os_return := -1; 57 os_errorinf := '原因:' || SQLERRM; 58 END sp_ins_fwpmt;
我不太明白为什么要这样处理,先创建空对象再赋值,难道不用直接插入么?