none
Gravar arquivo blob no mysql

    Question

  • Olá . Estou iniciando no C# com mysql. Estive vendo no fórum alguns tópicos explicando como inserir imagens, arquivos, txt, pdf, etc. No banco. Não achei em lugar algum , como inserir um arquivo qualquer em um registro e dar o insert no banco..
    Exemplo do código de gravação que estou fazendo.. o qual eu queria colocar o campo anexo e inserir um registro nele.

                            MySqlCommand gravar = new MySqlCommand(" insert into cadastrochamado(anexo,data_inc,isla,ticket,categoria,empresa,descricao,problema,resolucao,script)values('"
                            ####Passar o arquivo blod(anexo) para gravação####
    + edtDataTime.Text + "','"
                            + edtIsla.Text + "','"
                            + edtTicket.Text + "','"
                            + cbCategoria.Text + "','"
                            + cbEmpresa.Text + "','"
                            + edtDesc.Text + "','" 
                            + txtProblema.Text + "','" 
                            + txtResolucao.Text+ "','"  
                            + txtScript.Text + "')", banco);
                            gravar.BeginExecuteNonQuery();
                            MessageBox.Show("Cadastro Executado com sucesso!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);


    Alguém saberia dizer como fazer isto. 

    Thursday, November 25, 2010 12:39 PM

Answers

  • Vc tem q converser imagem para byte[] segue a funcao:

    public static Byte[] CodificarFoto(Image foto)
        {
          MemoryStream ms = new MemoryStream();
    
          foto.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //Salvando imagem no memoryStream
    
          Byte[] myData = new Byte[ms.Length];
    
          myData = ms.ToArray();
    
          return myData;
        }
    

    depois vc pod passar parametros ex:

    public byte[] imagem { get; set; }

     

     //Salva os dados
        public void Gravar()
        {
          Conexao cn = new Conexao();
          MySqlConnection cnn = new MySqlConnection();
          cnn = cn.abrirbanco();
          string sql = "Insert into produto (idproduto,nome,custo,venda,qtd,foto,idgrupo,idmarca,estoque,lote,fixo)"
            + "VALUES (@idproduto,@nome,@custo,@venda,@qtd,@foto,@idgrupo,@idmarca,@estoque,@lote,@fixo)";
    
          MySqlCommand cmd = new MySqlCommand(sql, cnn);
    
          cmd.Parameters.Add("@idproduto", MySqlDbType.Int32).Value = IdProduto;
          cmd.Parameters.Add("@nome", MySqlDbType.String).Value = Nome;
          cmd.Parameters.Add("@estoque", MySqlDbType.String).Value = Estoque;
          cmd.Parameters.Add("@lote", MySqlDbType.String).Value = Lote;
          cmd.Parameters.Add("@fixo", MySqlDbType.String).Value = Fixo;
          cmd.Parameters.Add("@custo", MySqlDbType.Decimal).Value = Custo;
          cmd.Parameters.Add("@venda", MySqlDbType.Decimal).Value = Venda;
          cmd.Parameters.Add("@qtd", MySqlDbType.Decimal).Value = Qtd;
          cmd.Parameters.Add("@foto", MySqlDbType.Blob).Value = FotoPes;
          cmd.Parameters.Add("@idgrupo", MySqlDbType.Int32).Value = IdGrupo;
          cmd.Parameters.Add("@idmarca", MySqlDbType.Int32).Value = IdMarca;
          cmd.ExecuteNonQuery();
          cnn.Dispose();
          cn.Fecharbanco(cnn);
    
        }
    

    • Marked as answer by Danilo villera Thursday, November 25, 2010 5:10 PM
    Thursday, November 25, 2010 4:35 PM

All replies

  • Danilo,

    Utilize parâmetros do ADO.NET ao invés de ficar concatenando os valores no seu INSERT... Isso resolve esse e outros problemas:

    http://www.devart.com/dotconnect/mysql/docs/Parameters.html


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    Thursday, November 25, 2010 3:41 PM
  • Dei uma olhada .. Verdade por passagem de parâmentros o código fica mais simples e mais limpo.Da próxima vou fazer assim.

    Porém ja fiz uma aplicação não tem como mudar tudo o que fiz até aqui.. 

     

    Estou tentando encontrar alguma forma de fazer insert de algum arquivo no campo blob.

    Mas desde já agradeço pela dica, foi muito oportuna.

    Thursday, November 25, 2010 4:22 PM
  • @Helo Danilo

    O Andre Tem razao, fica muito Facil organizar e ver o erro se voce usar parametros.

    Veja esta dica sobre Blob : http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-blob.html


    Just Be Humble Malange!
    Thursday, November 25, 2010 4:34 PM
  • Vc tem q converser imagem para byte[] segue a funcao:

    public static Byte[] CodificarFoto(Image foto)
        {
          MemoryStream ms = new MemoryStream();
    
          foto.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //Salvando imagem no memoryStream
    
          Byte[] myData = new Byte[ms.Length];
    
          myData = ms.ToArray();
    
          return myData;
        }
    

    depois vc pod passar parametros ex:

    public byte[] imagem { get; set; }

     

     //Salva os dados
        public void Gravar()
        {
          Conexao cn = new Conexao();
          MySqlConnection cnn = new MySqlConnection();
          cnn = cn.abrirbanco();
          string sql = "Insert into produto (idproduto,nome,custo,venda,qtd,foto,idgrupo,idmarca,estoque,lote,fixo)"
            + "VALUES (@idproduto,@nome,@custo,@venda,@qtd,@foto,@idgrupo,@idmarca,@estoque,@lote,@fixo)";
    
          MySqlCommand cmd = new MySqlCommand(sql, cnn);
    
          cmd.Parameters.Add("@idproduto", MySqlDbType.Int32).Value = IdProduto;
          cmd.Parameters.Add("@nome", MySqlDbType.String).Value = Nome;
          cmd.Parameters.Add("@estoque", MySqlDbType.String).Value = Estoque;
          cmd.Parameters.Add("@lote", MySqlDbType.String).Value = Lote;
          cmd.Parameters.Add("@fixo", MySqlDbType.String).Value = Fixo;
          cmd.Parameters.Add("@custo", MySqlDbType.Decimal).Value = Custo;
          cmd.Parameters.Add("@venda", MySqlDbType.Decimal).Value = Venda;
          cmd.Parameters.Add("@qtd", MySqlDbType.Decimal).Value = Qtd;
          cmd.Parameters.Add("@foto", MySqlDbType.Blob).Value = FotoPes;
          cmd.Parameters.Add("@idgrupo", MySqlDbType.Int32).Value = IdGrupo;
          cmd.Parameters.Add("@idmarca", MySqlDbType.Int32).Value = IdMarca;
          cmd.ExecuteNonQuery();
          cnn.Dispose();
          cn.Fecharbanco(cnn);
    
        }
    

    • Marked as answer by Danilo villera Thursday, November 25, 2010 5:10 PM
    Thursday, November 25, 2010 4:35 PM
  • Renathu.. Perfeito cara.. era isso mesmo que precisava. Muito obrigado. 

    E daqui para frente passarei os valores por parâmetros.Realmente é mais simples. 

    Obrigado a todos.

     

    Thursday, November 25, 2010 5:14 PM