Oracle存储过程保存大文件或者图片

    Oracle 使用BLOB类型保存大文件、图片之类的文件,blob可保存小于4GB字节的文件

方法呢,就是先把图片或者文件转换成数据流  byte[]

在把流保存到blob字段中

 

    但是你可能会碰到一个问题,某个文件或者图片太大了(byte[].length大于int),通过存储过程写入到数据库的似乎会发生错误。

 

解决方法:

 

   1、不使用存储过程

   2、将byte[]直接转换成blob类型

 

   我的第二个方法经验:

   这个转换方法

   #region 转换大文件
        public OracleLob ByteToOracleLob(byte[] p_bytes)
        {
            //必须保证连接是开的
            //dbOperate.Open();
            string strSQLTemp = "declare xx blob; begin dbms_lob.createtemporary(xx, false, 0); :tempblob := xx; end;";
            OracleParameter[] Params1 = new OracleParameter[1];
            Params1[0] = new OracleParameter("tempblob", OracleType.Blob);
            Params1[0].Direction = System.Data.ParameterDirection.Output;
            OracleCommand oracmd=dbOperate.CreateCommand(strSQLTemp, "CommandType.Text");
            oracmd.Parameters.AddRange(Params1);
            oracmd.ExecuteNonQuery();
            OracleLob tempLob = (OracleLob)Params1[0].Value;
            tempLob.BeginBatch(OracleLobOpenMode.ReadWrite);
            tempLob.Write(p_bytes, 0, p_bytes.Length);
            tempLob.EndBatch();
            //dbOperate.Close();
            return tempLob;
        }
        #endregion

 

 

    调用的时候如下面例子:

   dbOperate.Open();
                dbOperate.BeginTrans();
                System.Data.OracleClient.OracleCommand oraCmd =                      dbOperate.CreateCommand("PKG_BDMS.Pro_Update_TerminalIcon");

 

                oraCmd.Parameters.Add("V_BG_PC", OracleType.Blob);
                oraCmd.Parameters["V_BG_PC"].Value = ByteToOracleLob(bgpc);

 

   。。。。。。。

 

   oraCmd.ExecuteNonQuery();
    dbOperate.CommitTrans();

 

 

记得使用事务

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值