当前位置:  数据库>oracle

C#对Oracle数据库中图片的处理

    来源: 互联网  发布时间:2017-04-04

    本文导语: 由于Oracle课程设计中涉及到图片的处理,测试了好长的时间和查阅了很多的资料,终于把这个问题解决了,在这和大家分享一下: 一、图片保存到数据库 oracle中一般保存图片的类型为blob,一般的步骤为: 1,首先把图片转化为...

由于Oracle课程设计中涉及到图片的处理,测试了好长的时间和查阅了很多的资料,终于把这个问题解决了,在这和大家分享一下:

一、图片保存到数据库

oracle中一般保存图片的类型为blob,一般的步骤为:

1,首先把图片转化为二进制(byte[])

    FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
                byte[] buffByte = new byte[fs.Length];
                fs.Read(buffByte, 0, Convert.ToInt32(fs.Length));
                fs.Close();


2,把二进制保存到oracle数据库

     string strconn = "data source = oem;user id= exam; password=exam;persist security info=false;";
                OracleConnection conn = new OracleConnection(strconn);
                conn.Open();
                OracleCommand comm = new OracleCommand("addUser", conn);//存储过程adduser
                comm.CommandType = CommandType.StoredProcedure;
                comm.Parameters.Add("i_name", OracleType.VarChar, 50);
                comm.Parameters.Add("i_pic", OracleType.Blob);
                //comm.Parameters.Add("i_result", OracleType.Int32);
                comm.Parameters[0].Value = this.textBox2.Text;
                comm.Parameters[1].Value = buffByte;//这个为图片的二进制形式
                //comm.Parameters[2].Direction = ParameterDirection.Output;
                comm.ExecuteNonQuery();










    conn.Close();

二、读取oracle数据库转化为图片www.linuxidc.com

步骤:

1、读出二进制

 string strconn = "data source = oem;user id= exam; password=exam;persist security info=false;";
            OracleConnection conn = new OracleConnection(strconn);
            conn.Open();
            OracleCommand comm = new OracleCommand("selectUser", conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.Add("flag", OracleType.Int32);
            comm.Parameters.Add("i_name", OracleType.VarChar, 50);
            comm.Parameters.Add("cur_out", OracleType.Cursor);
            comm.Parameters[0].Value = 2;
            comm.Parameters[1].Value = this.comboBox1.SelectedValue.ToString();
            comm.Parameters[2].Direction = ParameterDirection.Output;
            OracleDataAdapter da = new OracleDataAdapter(comm);
            DataSet ds = new DataSet();
            da.Fill(ds);












    conn.close();

2、转化为图片

if (ds.Tables[0].Rows.Count > 0)
            {
                MemoryStream buf = new MemoryStream();
                byte[] blob = (byte[])ds.Tables[0].Rows[0]["pic"];//
                buf.Write(blob, 0, blob.Length);
                Image image = Image.FromStream(buf);
                pictureBox2.Image = image;
            }






涉及到的存储过程

 //create or replace procedure addUser
                //(i_name in U_INFO.NAME%type,
                // i_pic  in u_info.pic%type

                // )
                // is
                // begin
                //   insert into U_INFO(name,pic) values(i_name,i_pic);
                // end adduser;



 

//create or replace procedure selectUser
            //(flag in int,
            // i_name  in u_info.name%type,
            // cur_out  out  sys_refcursor
            // )
            // is
            // begin
            //  if flag=1 then
            //     open cur_out for
            //      select name from U_Info;
            //  end if;
            //  if flag=2 then
            //     open cur_out for
            //      select * from U_Info where name=i_name;
            //  end if;
            // end selectUser;














注:在此遇见的问题

 Image.FromStream(buf);这块报参数无效

可能的原因:

1,图片转化为二进制是出现问题,导致读取的二进制不能转化为图片,所以报参数无效

2,读取时转化出错,可能byte长度不够,导致不完整,报参数无效


    
 
 

您可能感兴趣的文章:

  • C#连接Oracle数据库的实例方法
  • c#中oracle to_date函数用法举例
  • c#中oracle的to_date函数使用方法
  • C#利用ODP.net连接Oracle数据库的操作方法
  • 深入分析C#连接Oracle数据库的连接字符串详解
  • C# Oracle数据库操作类实例详解
  • c#实现的操作oracle通用类
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • ORACLE数据库常用字段数据类型介绍
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • Oracle发布Oracle SQL Developer 1.2数据库开发工具 帮助用户简化开发工作
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle收购TimesTen 提高数据库软件性能
  • 卸载oracle数据库
  • Oracle数据库恢复后心得
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle数据库运行Oracle form时避免出现提示信息
  • Oracle欲收购开源数据库MySQL未果
  • 如何在JBuilder中连接Oracle数据库?
  • Oracle数据库访问参数文件的顺序
  • 循序渐进学习Oracle数据库
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在Redhat7.2+Oracle8i如果硬件配置中用P4处理器,对oracle的安装有没有影响(100分)
  • Oracle控制文件多元化处理
  • 关于ORACLE中执行批处理的问题
  • oracle删除文件后数据库启动不了的处理方法
  • MS Server和Oracle中对NULL处理的一些细节差异
  • ORACLE DATAGUARD中手工处理日志v$archive_GAP的方法
  • Oracle 10g中用FIRALL处理非连续数组
  • 重新安装主机后ORACLE DB的处理
  • 轻轻松松学会在Oracle中实现时间相加处理
  • Linux系统下导出ORACLE数据库出现Exporting questionable statistics.错误 处理
  • 处理Oracle数据库中杀不掉的锁
  • oracle 11g导出数据时报ORA 1455错误的处理方法
  • redhat 下 oracle proc 预处理总是留下 tpXXXXXX 的临时文件
  • Oracle时间精确到时、分、秒处理方案
  • 一次Oracle故障处理过程
  • Oracle 插入超4000字节的CLOB字段的处理方法
  • Oracle 10g中用FORALL处理非连续数组
  • Oracle对于死锁的处理方法
  • Oracle中关于处理小数点位数的几个函数
  • SQL Server和Oracle并行处理比较分析
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • ORACLE日期相关操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3