Usuário com melhor resposta
Como inserir por exemplo o nome, apelido e a imagem usando o objecto pictureBox numa base de dados usando c# 2012 ?

Pergunta
-
Boa noite...
Como inserir por exemplo o nome, apelido e a imagem usando o objecto pictureBox numa base de dados usando c# 2012
?
Estava tentando desta forma:
ms = new MemoryStream();
picFoto.Image.Save(ms, ImageFormat.Jpeg);
byte[] foto_array = new byte[ms.Length];
ms.Position = 0;
ms.Read(foto_array, 0, foto_array.Length);cls.comando = new System.Data.SqlClient.SqlCommand("INSERT INTO FUNCIONARIOS(CodigoFu,Nome,DataNascimento,NumBI,Foto)VALUES('" + cbCodigoFu.Text + "','" + txtNome.Text + "','" + dateTimeDataNascimento.Text + "','" + txtNumBI.Text + "','" + foto_array + "') ", cls.conexao);
Encontrei algumas dificuldades agradeceria se alguém postasse neste problema...
- Editado Marcos SJ sexta-feira, 18 de março de 2016 19:32 Edição
Respostas
-
Afonso,
Baseado na sua implementação com SqlComand, use este método para gravar imagens:
public static byte[] ImageToByteArray(Image imageIn) { var ms = new MemoryStream(); imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } private void button1_Click(object sender, EventArgs e) { try { _con.Open(); var sqlCommand = new SqlCommand("Insert into [Imagens] (imagem, nome) Values (@imagem, @nome)", _con); var img = pictureBox1.Image; sqlCommand.Parameters.Add("imagem", SqlDbType.Image, 0).Value = ImageToByteArray(img); sqlCommand.Parameters.Add("nome", SqlDbType.VarChar, 50).Value = label3.Text; var queryResult = sqlCommand.ExecuteNonQuery(); if (queryResult == 1) MessageBox.Show(@"Imagem gravada com sucesso"); } catch (Exception ex) { throw new Exception(@"Erro: " + ex.Message); } finally { _con?.Close(); CarregarImagensDisponiveis(); } }
Tenho um projeto exemplo que desenvolvi hoje, onde gravo no banco a partir de um um arquivo de imagem exibido no picturebox e faço também a exibição da imagem a partir do banco de dados, no picturebox.
Se você quiser para estudar os métodos, posso disponibilizar.
Att,
Antero Marques
- Marcado como Resposta Marcos SJ sexta-feira, 18 de março de 2016 13:00
- Editado Antero Marques sábado, 19 de março de 2016 18:16
- Não Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:50
-
Afonso,
Nesse método eu apenar carrego o Grid a partir da base.
No caso da minha base de teste é apenas isto :
private void CarregarImagensDisponiveis() { try { _con.Open(); var cmd = new SqlCommand("SELECT Id, Nome FROM Imagens", _con); var data = new SqlDataAdapter(cmd); var dbset = new DataSet(); data.Fill(dbset, "Imagens"); var c = dbset.Tables["Imagens"].Rows.Count; if (c > 0) { dataGridView1.DataSource = dbset; dataGridView1.DataMember = "Imagens"; } } catch (Exception ex) { throw new Exception(@"Erro: " + ex.Message); } finally { _con?.Close(); } }
Att,
Antero Marques
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
-
Obrigado Antero...
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
Todas as Respostas
-
Afonso,
Baseado na sua implementação com SqlComand, use este método para gravar imagens:
public static byte[] ImageToByteArray(Image imageIn) { var ms = new MemoryStream(); imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray(); } private void button1_Click(object sender, EventArgs e) { try { _con.Open(); var sqlCommand = new SqlCommand("Insert into [Imagens] (imagem, nome) Values (@imagem, @nome)", _con); var img = pictureBox1.Image; sqlCommand.Parameters.Add("imagem", SqlDbType.Image, 0).Value = ImageToByteArray(img); sqlCommand.Parameters.Add("nome", SqlDbType.VarChar, 50).Value = label3.Text; var queryResult = sqlCommand.ExecuteNonQuery(); if (queryResult == 1) MessageBox.Show(@"Imagem gravada com sucesso"); } catch (Exception ex) { throw new Exception(@"Erro: " + ex.Message); } finally { _con?.Close(); CarregarImagensDisponiveis(); } }
Tenho um projeto exemplo que desenvolvi hoje, onde gravo no banco a partir de um um arquivo de imagem exibido no picturebox e faço também a exibição da imagem a partir do banco de dados, no picturebox.
Se você quiser para estudar os métodos, posso disponibilizar.
Att,
Antero Marques
- Marcado como Resposta Marcos SJ sexta-feira, 18 de março de 2016 13:00
- Editado Antero Marques sábado, 19 de março de 2016 18:16
- Não Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:50
-
-
Afonso,
Nesse método eu apenar carrego o Grid a partir da base.
No caso da minha base de teste é apenas isto :
private void CarregarImagensDisponiveis() { try { _con.Open(); var cmd = new SqlCommand("SELECT Id, Nome FROM Imagens", _con); var data = new SqlDataAdapter(cmd); var dbset = new DataSet(); data.Fill(dbset, "Imagens"); var c = dbset.Tables["Imagens"].Rows.Count; if (c > 0) { dataGridView1.DataSource = dbset; dataGridView1.DataMember = "Imagens"; } } catch (Exception ex) { throw new Exception(@"Erro: " + ex.Message); } finally { _con?.Close(); } }
Att,
Antero Marques
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
-
Obrigado Antero...
- Marcado como Resposta Angolano de Ouro sábado, 19 de março de 2016 18:49
-
-
-
private void CarregarImagem(int func) { try { _con.Open(); var sqlCommand = new SqlCommand("SELECT Imagem FROM Imagens where id = @id", _con); sqlCommand.Parameters.Add("id", SqlDbType.Int, 0).Value = func; var data = new SqlDataAdapter(sqlCommand); var dbset = new DataSet(); data.Fill(dbset, "Imagens"); var c = dbset.Tables["Imagens"].Rows.Count; if (c > 0) { var bytedb = (Byte[])(dbset.Tables["Imagens"].Rows[c - 1]["Imagem"]); using (var stream = new MemoryStream(bytedb)) { pictureBox1.Image = Image.FromStream(stream); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; } } } catch (Exception ex) { throw new Exception(@"Erro: " + ex.Message); } finally { _con?.Close(); }
Blz ?
Antero Marques
________________________________________________________________________
Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.
O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.
- Editado Antero Marques domingo, 27 de março de 2016 22:17