none
Questão RRS feed

  • Pergunta

  • Boa noite pessoal...

    Estou com uma duvida! Eu tenho uma tabela tblClientes com alguns campos e um deles é o campo foto que contem uma fotografia.

    Estou a programar em multicamadas, A minha ideia é transportar o campo foto que do tipo byte que se encontra na base de dados na tblClientes, isto é, da camada BLL para Um formulário no objecto pictureBox... 

    Já fazia está conversão mas não em camadas desta forma:

    if (cls.conexao.State != ConnectionState.Open)

    cls.conexao.Open();

    cls.comando = new System.Data.SqlClient.SqlCommand("SELECT Nome,DataNascimento,Foto FROM tblClientes WHERE CodCliente = '" + cbxCodCliente.Text + "' ", cls.conexao);

    System.Data.SqlClient.SqlDataReader seleccione = cls.comando.ExecuteReader();

    while (seleccione.Read())

    {

    txtNome.Text = seleccione["Nome"].ToString();

    dateTimeDataNascimento.Text = seleccione["DataNascimento"].ToString();

    pictureFoto.Image = null;

    if (seleccione["Foto"] != System.DBNull.Value)

    {

    foto_arry = (byte[])seleccione["Foto"];

    MemoryStream ms = new MemoryStream(foto_arry);

    pictureFoto.Image = Image.FromStream(ms);

    }

    }

    Seleccione.Close();

    Agradeceria se alguém tentasse:

    Atenciosamente... 

    terça-feira, 27 de dezembro de 2016 19:59

Respostas

  • Boa noite Daniel Brito...

    Tentei como postaste, deu certo para os outros campos mas para o campo Foto ele apresenta um erro de execução com o teor: O parâmetro não é valido.

    Fiz desta maneira para converter o byte em imagem: 

                ptbFoto.Image = null;
                if (cliente .Foto != null)
                {
                    foto_arry = cliente.Foto;
                    MemoryStream ms = new MemoryStream(foto_arry);
                    ptbFoto.Image = Image.FromStream(ms);
                }

    Onde ptbFoto é um objeto do tipo PictureBox

     Está correto apenas a variavel foto_arry não é necessário:

    ptbFoto.Image = null;
                if (cliente .Foto != null && cliente.Foto.Length > 0)
                {                
                    MemoryStream ms = new MemoryStream(cliente.Foto);
                    ptbFoto.Image = Image.FromStream(ms);
                }
     Teste assim, caso gere algum erro use o debug para ver em qual linha ocorre.

    • Marcado como Resposta Angolano de Ouro quinta-feira, 29 de dezembro de 2016 17:24
    quinta-feira, 29 de dezembro de 2016 11:22

Todas as Respostas

  • Olá,

     Poderia criar uma classe chamada "Cliente" com os campos:

    public class Cliente
        {
            public string Nome { get; set; }
            public string DataNascimento { get; set; }
            public byte[] Foto { get; set; }
        }

     Para atribuir os valores criaria um método que retornasse sua classe cliente:

    public Cliente GetCliente()
    {
    
    //aqui toda sua logica de conexao....
    
    
    Cliente cliente = new Cliente();
    
    while (seleccione.Read())
    {
    cliente.Nome = seleccione["Nome"].ToString();
    cliente.DataNascimento = seleccione["DataNascimento"].ToString();
    
    if (seleccione["Foto"] != System.DBNull.Value)
    {
    cliente.Foto = (byte[])seleccione["Foto"];
    
    }
    }
    
    return cliente;
    
    }

    Para utilizar algo parecido a isso:

    Cliente cliente = suaclasseBll.GetCliente();
    
    txtNome.text = cliente.Nome;
    
    if(cliente.Foto != null)
    {
     //mesma logica 
    }
    
    
     Basicamente e por ai... 

    quarta-feira, 28 de dezembro de 2016 10:21
  • Boa noite Daniel Brito...

    Tentei como postaste, deu certo para os outros campos mas para o campo Foto ele apresenta um erro de execução com o teor: O parâmetro não é valido.

    Fiz desta maneira para converter o byte em imagem: 

                ptbFoto.Image = null;
                if (cliente .Foto != null)
                {
                    foto_arry = cliente.Foto;
                    MemoryStream ms = new MemoryStream(foto_arry);
                    ptbFoto.Image = Image.FromStream(ms);
                }

    Onde ptbFoto é um objeto do tipo PictureBox

    quarta-feira, 28 de dezembro de 2016 22:22
  • Boa noite Daniel Brito...

    Tentei como postaste, deu certo para os outros campos mas para o campo Foto ele apresenta um erro de execução com o teor: O parâmetro não é valido.

    Fiz desta maneira para converter o byte em imagem: 

                ptbFoto.Image = null;
                if (cliente .Foto != null)
                {
                    foto_arry = cliente.Foto;
                    MemoryStream ms = new MemoryStream(foto_arry);
                    ptbFoto.Image = Image.FromStream(ms);
                }

    Onde ptbFoto é um objeto do tipo PictureBox

     Está correto apenas a variavel foto_arry não é necessário:

    ptbFoto.Image = null;
                if (cliente .Foto != null && cliente.Foto.Length > 0)
                {                
                    MemoryStream ms = new MemoryStream(cliente.Foto);
                    ptbFoto.Image = Image.FromStream(ms);
                }
     Teste assim, caso gere algum erro use o debug para ver em qual linha ocorre.

    • Marcado como Resposta Angolano de Ouro quinta-feira, 29 de dezembro de 2016 17:24
    quinta-feira, 29 de dezembro de 2016 11:22