图片,二进制,oracle数据库

图片在oracle数据库中一般以二进制存在,存储类型是blob,然而clob类型一般存储的是大于4000的字符,不能用来存储图像这样的二进制内容,下面展示一下实现图像,二进制,oracle 数据库的应用过程

公共方法:

    //将图片以二进制流
        public byte[] SaveImage(String path)
        {
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); //将图片以文件流的形式进行保存
            BinaryReader br = new BinaryReader(fs);
            byte[] imgBytesIn = br.ReadBytes((int)fs.Length);  //将流读入到字节数组中
            return imgBytesIn;
        }

存入数据库:

 using (OracleConnection con = new OracleConnection(conStr))
            {
                con.Open();
                string path = @"F:\三门\1.封面.JPG";
                byte[] bytes = SaveImage(path);
                string strGetPicture = "insert into aq (content) values(:picByte)";
                using (OracleCommand cmd = new OracleCommand(strGetPicture,con))
                {
                    cmd.Parameters.Add(":picByte",OracleDbType.Blob);
                    cmd.Parameters[":picByte"].Value = bytes;
                    cmd.ExecuteNonQuery();
                }
            }

从数据库取出并且转化存入本地指定地址:

 using (OracleConnection con = new OracleConnection(conStr))
            {
                con.Open();
                string strGetPicture = "select t.content from AQ t";//这里假设只有一条记录
                using (OracleCommand cmd = new OracleCommand(strGetPicture, con))
                {
                    string strPath = @"F:\image\a.tif";
                    object reader = cmd.ExecuteScalar();//如果有多条可以写成 object reader = chunkReader["content"]; 类似这样的形式
                    byte[] bytes = (byte[])reader;//读到的内容转化成字节流

                    System.IO.MemoryStream ms = new MemoryStream(bytes);//创建流
                    System.Drawing.Image img = System.Drawing.Image.FromStream(ms);//从流中创建image对象
                    img.Save(strPath);//将image对象保存成图片存入指定位置
                }
            }

 

posted @ 2016-02-24 14:43  洛晨随风  阅读(1669)  评论(0编辑  收藏  举报