日期:2014-05-17  浏览次数:21074 次

【求助】Oracle 数据库中 blob字段问题
winform做照片存储到Oracle中时遇到更新数据卡死的状况,如果不停止会直接报连接超时的错误,
如果强制停止可以看到该字段有值。但是该条数据一直被占用锁死。

图片大小都不大 ,只有2k-4k左右。且已经转换为byte型。


OracleParameter[] parameters = new OracleParameter[2];
  parameters[0] = new OracleParameter("p_customersn", OracleDbType.Varchar2);
  parameters[0].Value = customerSn;
  parameters[1] = new OracleParameter("p_photo", OracleDbType.Blob, photo.Length);
  parameters[1].Value = photo;
  OracleHelper.ExecuteNonQuery(Program.connectionString, CommandType.StoredProcedure, "update_photp", parameters);


sql试过两种写法:
1、这种写法可以存进去,但是一直占用,无法停止。
PROCEDURE update_photp (p_customersn IN VARCHAR2, p_photo IN BLOB)
  IS
  BEGIN
--取出blob对象
  UPDATE spe_customer
  SET photo = p_photo
  WHERE customer_sn = p_customersn;
  END;
2、这种写法一个字也存不进去
PROCEDURE update_photp (p_customersn IN VARCHAR2, p_photo IN BLOB)
  IS
  lobloc BLOB;
  query_str VARCHAR2 (1000);
  BEGIN
--取出blob对象
  UPDATE spe_customer
  SET photo = EMPTY_BLOB ()
  WHERE customer_sn = p_customersn;

  query_str :=
  'select photo from spe_customer where customer_sn= :id for update ';

  EXECUTE IMMEDIATE query_str
  INTO lobloc
  USING p_customersn;

  --更新
  DBMS_LOB.WRITE (lobloc, UTL_RAW.LENGTH (p_photo), 1, p_photo);
  --COMMIT;
  END;

请问大家遇到过这种现象吗?

是什么原因导致的?是写法问题,还是数据库有什么问题?

谢谢了 很紧急!~ 非常感谢~~~

------解决方案--------------------
用PL SQL DEV工具可以更新进去>?
可以的话就是你的程序有问题,可能转换有问题,不行的话,看看报什么错误
------解决方案--------------------
没用过C#,参考一下:
1.http://lveyo.javaeye.com/blog/175727
2.http://blog.sina.com.cn/s/blog_4b9d73ad010008f2.html