none
Pergunta... RRS feed

  • Pergunta

  • Boa noite pessoal... Estou tentando transportar uma imagem do tipo byte que se encontra no Bano de dados para uma PitureBox 

    mas em programação 3 camadas como mostra o código abaixo em c# 2013:

                txtEmail.Text = Funcionario.Email;
                txtSkype.Text = Funcionario.Skepe;
                ptbFoto.Image = null;
                if (Funcionario.Foto != null && Funcionario.Foto.Length > 0)
                {
                    foto_arry = Funcionario.Foto;
                    MemoryStream ms = new MemoryStream(foto_arry);
                    ptbFoto.Image = Image.FromStream(new MemoryStream(foto_arry));
                }

    Mas na hora de executar apresenta o seguinte erro: O Parâmetro não é valido...

    Apliquei um debug, O erro esta na seguinte linha:

     ptbFoto.Image = Image.FromStream(new MemoryStream(foto_arry));

    Agradeceria se do vosso lado alguém ajudasse... Muito obrigado 



    quinta-feira, 5 de janeiro de 2017 22:01

Respostas

Todas as Respostas

  • Boa noite Angolano de Ouro

    É WinForm?


    Se ajudei Vote como Útil, se resolvi seu problema clique em Marcar como Resposta.


    Daniel Ribeiro Arrais
    Consultor Sênior
    Site: www.danielarrais.com.br
    Linkedin: http://www.linkedin.com/in/danielarrais
    E-mail: arraishapkido@gmail.com
    Skype: dani.arrais

    sexta-feira, 6 de janeiro de 2017 01:01
  • Bom dia, 

    Tente desta forma:

    txtEmail.Text = Funcionario.Email;
                txtSkype.Text = Funcionario.Skepe;
                ptbFoto.Image = null;
                if (Funcionario.Foto != null && Funcionario.Foto.Length > 0)
                {
                    foto_arry = Funcionario.Foto;
                    System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
                    ptbFoto.Image = (Image)converter.ConvertFrom(foto_arry);
                }


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    sexta-feira, 6 de janeiro de 2017 10:09

  • 1º Metodo: Que permite apresentar os dados do banco de dados nos objectos do formulário através da classe BLL
      private void mCarregarCampos()
            {
                clsFuncionarioDTO Funcionario = new clsFuncionarioDTO();
                if (this.Text == "FUNCIONÁRIOS")
                {
                    if (cbxCodFuncionario.Text != "")
                    {                    
                        bll.CarregarFuncionario(Funcionario, int.Parse(cbxCodFuncionario.Text));
                    }
                }
                txtFuncionario.Text = Funcionario.Funcionario;           
                txtEmail.Text = Funcionario.Email;
                txtSkype.Text = Funcionario.Skepe;
                ptbFoto.Image = null;
                if (Funcionario.Foto != null && Funcionario.Foto.Length > 0)
                {
                    foto_arry = Funcionario.Foto;
                    //MemoryStream ms = new MemoryStream(foto_arry);
                    //ptbFoto.Image = Image.FromStream(new MemoryStream(foto_arry));
                    System.Drawing.ImageConverter converter = new System.Drawing.ImageConverter();
                    ptbFoto.Image = (Image)converter.ConvertFrom(foto_arry);
                }
    2º Metodo: que se encontra na classe BLL que contém a intrução SQL
      public void CarregarFuncionario(clsFuncionarioDTO Funcionario,int comboBox)
            {
                string comando = "SELECT Funcionario,Email,Skype,Foto FROM tblFuncionarios WHERE  tblFuncionarios.CodFuncionario = " + comboBox + " ";
                string campo = "Funcionario"; 
                string campo1 = "Email";
                string campo2 = "Skype";
                string campo3 = "Foto";
                
                SqlDataReader seleccione = mMostrarDados(comando);
                while (seleccione.Read())
                {
                    Funcionario.Funcionario = seleccione[campo].ToString();                
                    Funcionario.Email = seleccione[campo1].ToString();
                    Funcionario.Skepe = seleccione[campo2]ToString();          
                    if (seleccione[campo3] != System.DBNull.Value)
                        Funcionario.Foto = (byte[])seleccione[campo3];
                }           
                seleccione.Close();            
            }
    3º Metodo: Que comunica diretamente com o banco de dados
    class clsABD
        {
            public SqlConnection conexao;
            private SqlCommand comando;
            private SqlCommandBuilder comandoB;
            private SqlDataAdapter seleccione;
            private SqlDataReader seleccione1;
            private DataTable tabela;      
           
            private string caminho = String.Format("Data Source=Afonso;Initial Catalog=DB_EMPRESA;Integrated Security=True");

            public void LigarBD()
            {
                if (conexao != null)
                    conexao.Close();
                try
                {
                    conexao = new SqlConnection(caminho);
                    conexao.Open();
                }
                catch (Exception ex)
                {                
                    throw new Exception ("Erro! Aplicação não conseguio ligar a Base de Dados!"+ex.Message);
                }        
            }

            public void DesligarBD()
            {
                try
                {
                    conexao = new SqlConnection(caminho);
                    conexao.Close();
                }
                catch (Exception ex)
                {                
                    throw new Exception ("Erro ao tentar desligar a Base de Dados!"+ex.Message);
                }        
            }

            public void mExecutarComandos(string comandoSQL)
            {
                LigarBD();
                comando = new SqlCommand(comandoSQL,conexao);
                try
                {
                    comando.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao executar camandoSQL!" + ex.Message);
                }
                finally
                {
                    DesligarBD();            
                }
            }

            public DataTable mCriarTabela(string comandoSQL)
            {
                LigarBD();
                tabela = new DataTable();
                seleccione = new SqlDataAdapter(comandoSQL,conexao);
                comandoB = new SqlCommandBuilder(seleccione);
                seleccione.Fill(tabela);
                DesligarBD();            
                return tabela;            
            }

            public SqlDataReader mCriarTabelaLeitura(string comandoSQL)
            {
                LigarBD();
                comando = new SqlCommand(comandoSQL, conexao);
                seleccione1  = comando.ExecuteReader();
                //DesligarBD();           
                return seleccione1;             
            }
        }
    Esta tudo em conforme carrega todos campos menos o campo Fotográria na PictureBox mais na hora de executar apresentea o seguinte erro:

    Boa noite Juliano Nunes... É sim winForm. Tentei como postaste ainda mesmo assim continua o mesmo erro...

    Observer: 



    sexta-feira, 6 de janeiro de 2017 20:27
  • Essa mensagem indica que o campo Foto nao contem um bytearray valido. Ou seja o bytearray nao é de um dos tipos validos para a imagem:,BMP,GIF,JPEG,PNG,TIFF

    fonte:http://stackoverflow.com/questions/6712557/image-fromstream-parameter-not-valid

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    sexta-feira, 6 de janeiro de 2017 20:58
    Moderador
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 9 de janeiro de 2017 11:04
    Moderador
  • William John o Link que tu apresentas sugere sim uma solução só que VB e eu estou a programar em c# e no visual studio 2012 e até agora o mesmo erro continua...
    quinta-feira, 12 de janeiro de 2017 21:18
  • Juliano tentei como sugeriste e ainda assim continua o mesmo erro... ou seja O parâmetro não é valido... 
    quinta-feira, 12 de janeiro de 2017 21:19
  • O link sugerido é somente para ver se o problema nao é o mesmo. Independente da linguagem utilizada, este problema ocorre caso o bytearray nao seja proveniente de  uma imagem  de um dos tipos validos: BMP,GIF,JPEG,PNG,TIFF

    Voce tem certeza que o bytearray (Funcionario.Foto) que voce esta tentando converter em uma imagem é realmente uma imagem?

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    quinta-feira, 12 de janeiro de 2017 21:26
    Moderador
  • Sim tenho a certeza William... Porque antes de converter para imagem consegui inserir a imagem para o banco de dados. Mas atravéz de um bug pude observar que o bytearray Funcionario.Foto tem o valor de 13 e não sei se o número 13 é a quantidade de bytes que neste caso será muito pequena...
    sábado, 14 de janeiro de 2017 01:58