none
Como cadastrar arquivos PDF, WORD e TXT no banco de dados MySql e C# RRS feed

  • Pergunta

  • Estou desenvolvendo um sisteminha pro tcc da faculdade, estou precisando cadastrar em uma tabela que possui cinco campos para registar pdf,doc e txt, já procurei em diversos lugares e simplesmente não consigo realizar o que quero, pq sou novata na linguagem.

    Tabela do banco categoria: id not null auto_increment, guias mediumblob, boletos mediumblob, notas mediumblob, holerite mediumblob, folha_pagamento mediumblob;

    Faço a classe get set:

     class cadas_documentos
    { 
        private int id;
        private int guias;//
        private int boletos;//
        private string notas;
        private string holerite;
        private string folhapagamento;
    
        public int id
        {
            get { return protocolo; }
            set { protocolo = value; }
    
        }
        public byte guias
        {
            get { return guias; }
            set { guias = value; }
    
        }
    
        public int boletos
        {
    
            get { return boletos; }
            set { boletos = value; }
        }
    
        public string notas
        {
            get { return notas; }
            set { notas = value; }
        }
        public string holerite
        {
            get { return holerite; }
            set { holerite = value; }
        }
        public string folha_pagamento
        {
    
            get { return folhapagamento; }
            set { folhapagamento = value; }
        }
    
    }

    Aqui faço outra classe pro insert no banco de dados:

    class dal_documentos
    {
    
        public void cadastro(cadas_documentos cadast)
        {
            string conec = ConfigurationManager.ConnectionStrings["cn"].ToString();
            MySqlConnection conexao = new MySqlConnection(conec);
    
            try
            {
                conexao.Open();
    
                string inserir = "INSERT INTO categoria (id,guias,boletos,notas,holerite,folha_pagamento) values ('" + cadast.id + "', '" + cadast.guias + "','" + cadast.boletos + "' ,'" + cadast.notas + "','" + cadast.holerite + "','" + cadast.folha_pagamento + "')";
    
                MySqlCommand comandos = new MySqlCommand(inserir, conexao);
    
                comandos.ExecuteNonQuery();
                MessageBox.Show("Documentos Cadastrados com Sucesso!", "Cadastro com Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                conexao.Close();
            }
    
            catch (Exception ex)
            {
    
                throw new Exception("Erro de comandos" + ex.Message);
            }
        }
    }

    Na tela do form, dentro dos botões de cada campo coloco o OpenDialog com esse codigo para procurar o arquivo e colocar ele dentro do campo:

     //botão de procurar Guias
        private void button4_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "All Files(*.*)|*.*|PDF Files(*pdf)|*.pdf|DOC Files(*docx)|*.docx|TXT Files(*txt)|*.txt";
    
            if(dlg.ShowDialog()==DialogResult.OK)
            {
                string picPath = dlg.FileName.ToString();
                textBox2.Text = picPath;
    
            }
        }

    E por ultimo dentro do botão salvar pego os campos pra salvar:

     //botão de salvar
        private void button1_Click(object sender, EventArgs e)
        { 
            cadas_documentos cadast = new cadas_documentos();
            dal_documentos dal = new dal_documentos();
    
            cadast.guias = Convert.ToByte(textBox2.Text);
            cadast.boletos =Convert.ToByte(textBox5.Text);
            cadast.notas = textBox6.Text;
            cadast.holerite = textBox7.Text;
            cadast.folha_pagamento = textBox10.Text;
    
            dal.cadastro(cadast);
        }

    Agora o que falta é transformar esse arquivo em bytes para poder cadastrar no banco, que é justamente a minha duvida, como eu transformo em bytes, aonde eu coloco o trecho pra transformar em bytes e gravar no banco?

    Se alguém puder me ajudar, não tenho mais a quem recorrer, pois sou iniciante na programção e preciso entregar esse tcc na faculdade, me ajudem por favor. 


    quinta-feira, 4 de abril de 2019 17:18

Respostas

  • Olá, Diana!

    Para a conversão em bytes você precisa mudar o tipo dos campos guias e boletos para bytes[], pois o arquivo consistirá de um array de bytes.

    private byte[] guias;

    public byte[] guias
    {
       get { return guias; }
       set { guias = value; }
    }

    Para a leitura dos bytes, faça o seguinte:

    private void button1_Click(object sender, EventArgs e) { cadas_documentos cadast = new cadas_documentos(); dal_documentos dal = new dal_documentos();

    // Realiza a leitura dos bytes do arquivo referente a guias
    // Assumindo que o caminho do arquivo passado pelo textBox2.Text está OK

    FileStream fStream = File.OpenRead(textBox2.Text);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    fStream.Close();

    cadast.guias = contents;

    //cadast.guias = Convert.ToByte(textBox2.Text); cadast.boletos =Convert.ToByte(textBox5.Text); cadast.notas = textBox6.Text; cadast.holerite = textBox7.Text; cadast.folha_pagamento = textBox10.Text; dal.cadastro(cadast); }


    “First do it, then do it right, then do it better.” - Addy Osmani


    quinta-feira, 4 de abril de 2019 20:08

Todas as Respostas

  • Olá, Diana!

    Para a conversão em bytes você precisa mudar o tipo dos campos guias e boletos para bytes[], pois o arquivo consistirá de um array de bytes.

    private byte[] guias;

    public byte[] guias
    {
       get { return guias; }
       set { guias = value; }
    }

    Para a leitura dos bytes, faça o seguinte:

    private void button1_Click(object sender, EventArgs e) { cadas_documentos cadast = new cadas_documentos(); dal_documentos dal = new dal_documentos();

    // Realiza a leitura dos bytes do arquivo referente a guias
    // Assumindo que o caminho do arquivo passado pelo textBox2.Text está OK

    FileStream fStream = File.OpenRead(textBox2.Text);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    fStream.Close();

    cadast.guias = contents;

    //cadast.guias = Convert.ToByte(textBox2.Text); cadast.boletos =Convert.ToByte(textBox5.Text); cadast.notas = textBox6.Text; cadast.holerite = textBox7.Text; cadast.folha_pagamento = textBox10.Text; dal.cadastro(cadast); }


    “First do it, then do it right, then do it better.” - Addy Osmani


    quinta-feira, 4 de abril de 2019 20:08
  • Olá wallace,

    Coloquei do jeito que o senhorito mostrou ai em cima, 

    Dai os campos fica vermelho, indicando que não é possivel fazer a conversão:

                cadast.guias = Convert.ToByte(textBox2.Text);
                cadast.boletos =Convert.ToByte(textBox5.Text);

    E fica mostrando a seguinte mensagem:

    Erro CS0029 Não é possível converter implicitamente tipo "byte" em "byte[]"

    socorro o que eu faço?


    • Editado Diana Alves quinta-feira, 4 de abril de 2019 21:02
    quinta-feira, 4 de abril de 2019 21:00
  • Você deve remover a linha 

    cadast.guias = Convert.ToByte(textBox2.Text);


    “First do it, then do it right, then do it better.” - Addy Osmani

    quinta-feira, 4 de abril de 2019 22:42
  • Nossa funcionou...muito obrigado jovem, Deus lhe abençoe muito, salvou minha vida.

    Sem querer abusar, se puder mostrar como faço pra exibir esses arquivos no datagridview, mostrando apenas os nomes deles, se é possivel fazer isso(não entendo muito), que na coluna do banco fica o nome blob só, como ocupado..Mas se não der não tem problema, já estou mto grata mesmo, de verdade muito obrigado!

    quinta-feira, 4 de abril de 2019 22:58
  • Olá, Diana! Nesse caso, poderíamos criar uma coluna na tabela CATEGORIA para armazenarmos também o nome do arquivo que gravamos no banco. Para preencher o DataGridView recuperaríamos essa coluna da tabela.

    “First do it, then do it right, then do it better.” - Addy Osmani

    sexta-feira, 5 de abril de 2019 12:45
  • Ok, muito obrigado Wallace, vou tentar fazer tudo direitinho aqui rs

    Muito obrigado mesmo.

    sexta-feira, 5 de abril de 2019 19:16
  • Eu criei na tabela categoria a coluna nomeGuia como varchar,

    dai tentei fazer o cadastro assim:

     cadast.nomeGuia = Path.GetFileName(contents.ToString());

    mas não foi, porderia me ajudar apenas com isso?

    sexta-feira, 5 de abril de 2019 21:14
  • Olá, Diana! Não funcionou porque o "contents" é um array de bytes, não um caminho para o arquivo. O caminho para o arquivo está na textBox2. Tente o seguinte código:

    private void button1_Click(object sender, EventArgs e) { cadas_documentos cadast = new cadas_documentos(); dal_documentos dal = new dal_documentos();

    // Realiza a leitura dos bytes do arquivo referente a guias
    // Assumindo que o caminho do arquivo passado pelo textBox2.Text está OK

    FileStream fStream = File.OpenRead(textBox2.Text);
    byte[] contents = new byte[fStream.Length];
    fStream.Read(contents, 0, (int)fStream.Length);
    fStream.Close();

    cadast.guias = contents;

    cadast.nomeGuia = Path.GetFileName(textBox2.Text); cadast.boletos =Convert.ToByte(textBox5.Text); cadast.notas = textBox6.Text; cadast.holerite = textBox7.Text; cadast.folha_pagamento = textBox10.Text; dal.cadastro(cadast); }


    “First do it, then do it right, then do it better.” - Addy Osmani

    sábado, 6 de abril de 2019 12:58
  • Era isso msm Wallace, mais uma vez salvando o dia...

    Muitissimo Obrigadooo!

    terça-feira, 9 de abril de 2019 00:39