none
Como inserir por exemplo o nome, apelido e a imagem usando o objecto pictureBox numa base de dados usando c# 2012 ? RRS feed

  • 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
    sexta-feira, 18 de março de 2016 00:05

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
    sexta-feira, 18 de março de 2016 05:57
  • 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

    sábado, 19 de março de 2016 17:56
  • Obrigado Antero...
    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
    sexta-feira, 18 de março de 2016 05:57
  • Obrigado Antero...

    Mas Que código devemos colocar no método CarregarImagensDisponiveis() ?


    sexta-feira, 18 de março de 2016 20:56
  • 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

    sábado, 19 de março de 2016 17:56
  • Obrigado Antero...
    sábado, 19 de março de 2016 18:49
  • Antero e o processo inverso de binary na base de dados para string na pictureBox como ficaria ?
    domingo, 27 de março de 2016 20:07
  • Antero e o processo inverso de binary na base de dados para string na pictureBox como ficaria ?
    domingo, 27 de março de 2016 20:08
  •         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.


    domingo, 27 de março de 2016 22:15