湖州做網(wǎng)站建設(shè)的公司女教師遭網(wǎng)課入侵直播錄屏曝光se
圖片存入ole字段,看有的代碼是獲取圖片的字節(jié)數(shù)組轉(zhuǎn)換為base64字符串,存入數(shù)據(jù)庫;顯示圖片是把base64字符串轉(zhuǎn)換為字節(jié)數(shù)組再顯示;直接存字節(jié)數(shù)組可能還好一點;
插入的時候用帶參數(shù)的sql寫法比較好;用拼接sql一般會出錯;
測試表有三個字段,加載一個圖片然后插入記錄;
插入以后如下;第5、6條是對的,3、4沒插對;如果要png、jpeg、gif等格式都支持,寫為?image1.Save(ms, image1.RawFormat);
?
讀取并顯示如下;
?
插入記錄的代碼,
Image image1;MemoryStream ms = new MemoryStream();byte[] arr1 = null; ;if (pictureBox1.Image != null){image1.Save(ms, image1.RawFormat);arr1 = new byte[ms.Length];ms.Position = 0;ms.Read(arr1, 0, (int)ms.Length);//pic1 = Convert.ToBase64String(arr1);}ms.Close();if (button1.Text == "添加"){if (textBox1.Text == ""){MessageBox.Show("名字不能為空!", "添加信息");return;}else{string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + Environment.CurrentDirectory + "\\mytest.mdb'";string query = "INSERT INTO testpic (a1, a2, ppp) VALUES (?,?,?)";using (OleDbConnection conn = new OleDbConnection(connectionString)){using (OleDbCommand cmd = new OleDbCommand(query, conn)){// 這里設(shè)置參數(shù)值,注意索引對應(yīng)你SQL語句中參數(shù)的位置cmd.Parameters.AddWithValue("?", textBox1.Text);cmd.Parameters.AddWithValue("?", textBox2.Text);cmd.Parameters.AddWithValue("?", arr1);conn.Open();int rowsAffected = cmd.ExecuteNonQuery();conn.Close();}}textBox1.Text = "";textBox2.Text = "";}}
讀取顯示圖片的代碼,
private void button2_Click(object sender, EventArgs e){string sql1 = "select * from testpic where id = " + 6;byte[] buff = null;buff = achelp.GetBufferFromDB(sql1, "ppp");System.IO.MemoryStream picbuf = new System.IO.MemoryStream(buff);Image image = Image.FromStream(picbuf, true);picbuf.Close();pictureBox1.Image = image;}......//返回圖片byte[]public byte[] GetBufferFromDB(string strSql, string fieldname){byte[] buff = null;if (conn_str == null){return null;}try{ole_connection.Open();//打開連接if (ole_connection.State == ConnectionState.Closed){return null;}ole_command.CommandText = strSql;ole_command.Connection = ole_connection;ole_reader = ole_command.ExecuteReader(CommandBehavior.Default);if (ole_reader.Read()){buff = (byte[])ole_reader[fieldname];}ole_reader.Close();ole_reader.Dispose();}catch (System.Exception e){//Console.WriteLine(e.ToString());MessageBox.Show(e.Message);}finally{if (ole_connection.State != ConnectionState.Closed){ole_connection.Close();}}return buff;}
要先執(zhí)行ole_reader.Read(),然后才能取ole_reader[fieldname];
?