图片,二进制,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对象保存成图片存入指定位置 } }
积累小的知识,才能成就大的智慧,希望网上少一些复制多一些原创有用的答案