none
Inserir imagem em um banco de dados via C# RRS feed

  • Pergunta

  • Olá,

    Tenho um projeto, estou fazendo um cadastro de usuários e para esses usuários, preciso inserir uma imagem no banco que será usada com assinatura e tal... tentei algumas coisas aqui, mas não resolveu... Alguém pode ajudar meu problema.

    (código)

    //Conexão do Form para o cadastro de Usuários
    private MySqlConnection conexao;
            public void cadastro(Classe_Usuarios cuser)
            {
                string caminho = "SERVER=localhost;DATABASE=teste;UID=root;PASSWORD=leandro;";
                try
                {
                    conexao = new MySqlConnection(caminho);
                    conexao.Open();
                    string inserir = "INSERT INTO usuario (nome, cpf, siape, tipo_usuario_idtipo_usuario, titulo, senha, status) values('"
                        + cuser.Nome + "','" + cuser.CPF + "','" + cuser.SIAPE + "','" + cuser.Tipo + "','"
                        + cuser.Titulo + "','" + cuser.Senha + "','" + cuser.Status + "')";
    
                    MySqlCommand comandos = new MySqlCommand(inserir, conexao);
    
                    comandos.ExecuteNonQuery();
                    conexao.Close();
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro de Conexao ou Comando: : " + ex.Message);
                }
            }

    //Função para salvar imagem no banco de dados 
            public static void AddEmployee(string photoFilePath, byte[] teste)
            {
                MySqlConnection conexao;
                string caminho = "SERVER=localhost;DATABASE=teste;UID='root';PASSWORD='leandro';";
    
                conexao = new MySqlConnection(caminho);
                conexao.Open();
    
                string sql = "INSERT INTO usuario (assinatura_digital) " + "values(@Photo);";
                MySqlCommand comandos = new MySqlCommand(sql, conexao);
    
                byte[] photo = teste; //GetPhoto(photoFilePath);
    
                comandos.Parameters.AddWithValue("@Photo", photo).Value = photo;
             }

    //FUNÇÃO PARA CONVERTER IMAGEM EM BYTE
            public byte[] imageToByteArray(System.Drawing.Image imageIn)
            {
                MemoryStream ms = new MemoryStream();
                imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                return ms.ToArray();
            }
    
    // FUNÇÃO PARA CONVERTER BYTE EM IMAGEM
            public Image byteArrayToImage(byte[] byteArrayIn)
            {
                MemoryStream ms = new MemoryStream(byteArrayIn);
                Image returnImage = Image.FromStream(ms);
                return returnImage;
            }
    

    //Botão para o cadastro do Form inteiro, de todos os dados
    private void cadastrar_Click(object sender, EventArgs e)
            {
                if (comboBox2.Text != "" && textBox14.Text != "" && textBox13.Text != "" && textBox12.Text != "" && textBox11.Text != "" && textBox10.Text != "" && status.Text != "")
                {
                    //Passando todos os "parametros" da classe ClasseUsuarios para uma variável e o mesmo com a classe dao
                    Classe_Usuarios usua = new Classe_Usuarios();
                    DAO_usuarios da = new DAO_usuarios();
    
                    usua.Tipo = comboBox2.Text;
                    usua.Nome = textBox14.Text;
                    usua.CPF = textBox13.Text;
                    usua.SIAPE = textBox12.Text;
                    usua.Titulo = textBox11.Text;
                    usua.Senha = textBox10.Text;
    
                    //salvando dados booleanos
                    if (status.Text == "Ativo")
                    {
                        usua.Status = true;
                        status.Text = "(Status)";
                    }
                    else if (status.Text == "Desativado")
                    {
                        usua.Status = false;
                        status.Text = "(Status)";
                    }
    
                    //salvando imagem
                    string file;
                    file = openFileDialog1.FileName;
                    AddEmployee(file, teste);
    
    
                    da.cadastro(usua);
    
                    textBox14.Text = ""; //nome
                    comboBox2.Text = ""; //tipo de usuarios
                    textBox13.Text = ""; //CPF 
                    textBox12.Text = ""; //SIAPE
                    textBox11.Text = ""; //titulo
                    textBox10.Text = "";  //senha
                    textBox16.Text = ""; //registro
                    pictureBox2.Image = null;
                }
                else
                {
                    MessageBox.Show("Preencha todos os dados", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }

    //Botão para abrir a imagem do PC para o pictureBox
    private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Bitmap bmp = new Bitmap(openFileDialog1.FileName);
                    Bitmap bmp2 = new Bitmap(bmp, pictureBox1.Size);
                    pictureBox1.Image = bmp2;
                    teste = imageToByteArray(bmp2);
                }
            }

    //Tem essa variável que usei também
    byte[] teste;
    Nota: Estou usando banco de dados MySql...
    quarta-feira, 6 de maio de 2015 18:44

Respostas

  • Boa tarde Leandro,

    O que você pode fazer, que eu considero mais fácil, é armazenar a imagem em um diretório e no banco de dados, salvar o caminho dela. Dessa forma, quando você precisar exibir/baixar, é só pesquisar o endereço dela no banco de dados e disponibilizá-la para download/exibição.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quinta-feira, 7 de maio de 2015 19:58
  • Tente passar o tipo Byte[] para poder gravar a imagem

    Exemplo:

     commandos.Parameters.Add("@photo", SqlDbType.Byte[]);
    //Aqui voce passa a sua imagem para converter para bytes
    commandos.Parameters["@photo"].Value = imageToByteArray("sua_imagem");
    
    
    

    OBS: O campo no banco de dados deve estar como VarBinary ou Blob

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quinta-feira, 7 de maio de 2015 19:12

Todas as Respostas

  • Leandro, ao inserir o parametro com o valor da imagem, você precisa passar o tipo dele. Acho que é o MySqlDataType.VarBinary ou MySqlDataType.Image. Enfim, você precisa passar o tipo do dado que você está adicionando ao parâmetro.
    quarta-feira, 6 de maio de 2015 18:51
  • Tente passar o tipo Byte[] para poder gravar a imagem

    Exemplo:

     commandos.Parameters.Add("@photo", SqlDbType.Byte[]);
    //Aqui voce passa a sua imagem para converter para bytes
    commandos.Parameters["@photo"].Value = imageToByteArray("sua_imagem");
    
    
    

    OBS: O campo no banco de dados deve estar como VarBinary ou Blob

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    quinta-feira, 7 de maio de 2015 19:12
  • Boa tarde Leandro,

    O que você pode fazer, que eu considero mais fácil, é armazenar a imagem em um diretório e no banco de dados, salvar o caminho dela. Dessa forma, quando você precisar exibir/baixar, é só pesquisar o endereço dela no banco de dados e disponibilizá-la para download/exibição.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    quinta-feira, 7 de maio de 2015 19:58