C#對Oracle資料庫中圖片的處理

來源:互聯網
上載者:User

由於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.bkjia.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長度不夠,導致不完整,報參數無效

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.