由于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长度不够,导致不完整,报参数无效Gentoo编译安装MySQL 5.1.xJava 调用bat执行的备份Oracle数据库 类相关资讯 Oracle教程
- Oracle中纯数字的varchar2类型和 (07/29/2015 07:20:43)
- Oracle教程:Oracle中查看DBLink密 (07/29/2015 07:16:55)
- [Oracle] SQL*Loader 详细使用教程 (08/11/2013 21:30:36)
| - Oracle教程:Oracle中kill死锁进程 (07/29/2015 07:18:28)
- Oracle教程:ORA-25153 临时表空间 (07/29/2015 07:13:37)
- Oracle教程之管理安全和资源 (04/08/2013 11:39:32)
|
本文评论 查看全部评论 (0)