none
Esclarecimento RRS feed

  • Pergunta

  • Boa noite Pessoal.

    O que fazer quando um parâmetro estiver a levar um valor inferior em bytes em relação ao que se encontra no banco de dados ?

    Esta duvida surgiu em função de uma imgem que se encontra no banco de dados mas em bytes e eu preciso transportala para uma pitureBox para tal utilizei um parâmetro Funcionario.Foto onde Foto é do tipo Byte [] mas ao buscar os dados no banco de dados apresenta um erro esquesito: parâmetro invalido. apliquei um bug pude observar que a quantidade de bytes que o parâmentor está a levar é de 13 ou seja apresenta byte [13]. Agradeceria que alguém postasse neste erro. Isto em c# 2013.

    Desde muito obrigado

    sábado, 14 de janeiro de 2017 02:13

Respostas

  • A minha coluna no banco de dado é do tipo image...

    Apliquei esta instrução: SELECT DATALENGTH(FOTO) FROM SUATABELA, o tamanho é de 13 bytes...

    É ali onde reside o problema Daniel... 

    Outro sim Daniel na hora de mandar para o banco de dados através de um Insert apliquei um bug pude observar que a quantidade de bytes é completa ou seja de 6534 bytes mas só cai no banco de dados 13 bytes.
     Altera o tipo da coluna para testar de Image para varbinary(MAX), acredito que vai resolver...
    sexta-feira, 20 de janeiro de 2017 09:44

Todas as Respostas

  • Boa tarde,

    Por gentileza, você poderia nos fornecer mais informações?
    Se possível poste o seu código e imagem da mensagem de erro.

    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, 16 de janeiro de 2017 14:19
    Moderador
  • Boa noite Robson...

    Eu pude localizar o erro Mas está difícil soluciona-lo... O erro está no SGBD eu uso o SQL Server 2012 e é com ele que concebi a banco de dados mas na hora de transportar os bytes que se encontra na banco de dados para a pictureBox ele se aparece no parâmetro apenas 13 bytes e é pouco porque uma imagem ocupa mais espaço no banco de dados. O mesmo código utilizado numa banco de dados que havia criado numas das versões e não me lembro mais funcionou e observei a quantidade de bytes é aproximadamente de 1000.000. Em suma parâmetro não está a trazer a quantidade completa de bytes que se encontra no campo imagem... 

    O código está em condições mas a imagem que se encontra na banco de dados vem incompleta, com apenas 13 bytes e no parâmetro Funcionario.Foto. Aqui tenho o código. 

    Nota que que o campo Foto no banco de dados é do tipo image           

    E mais abaixo tenho o erro 

    segunda-feira, 16 de janeiro de 2017 23:03
  • Bom dia,

     Na sua tabela qual o tamanho de seu campo que armazena a foto ?

     No lugar de :

    ptbFoto.Image = (Image)Converter.ConvertFrom(foto_arry);

     Não seria:

    ptbFoto.Image = (Image)Converter.ConvertFrom(Funcionario.Foto);
     Espero que lhe ajude.

    terça-feira, 17 de janeiro de 2017 09:45
  •  O Campo que armazena a foto é do tipo image e como é lógico na hora de mandar a imagem para a tabela temos que converte-la para bytes ali está tudo bem. Ná hora de buscar os bytes na tabela para apresentar na pictureBox atráves desta função ptbFoto.Image = (Image)Converter.ConvertFrom(Funcionario.Foto), a imagem vem incompleta com apenas 13 bytes e quantidade que ela ocupa na tabela é de aproximadamente  1048576 bytes é ali onde está o problema. Parametro invalido... 

    terça-feira, 17 de janeiro de 2017 10:27
  • Então vamos lá,

     Na gravação está tudo normal, você confere o tamanho do registro em sua tabela e o mesmo possui 1048576 bytes certo.

     Então o problema está na busca, qual o select utilizado e como está sendo feito ?

    terça-feira, 17 de janeiro de 2017 15:29
  • O select que estou a utilizar é este:

                string comando = "SELECT Funcionario, Num_BI, Data_Nascimento, Estado_Civil, Pais, Provincia, Municipio, Habilitacoes, Categoria, Departamento,Genero,Num_Conta,Iban,Salario,Num_Contribuinte, Num_Seguranca_Social,Telefone,Email,Skype,Banco,Foto FROM tblFuncionarios,tblEstado_Civil,tblPais,tblProvincias,tblMunicipios,tblHabilitacoes,tblCategorias,tblDepartamentos,tblGeneros,tblBancos WHERE tblEstado_Civil.CodEstado_Civil=tblFuncionarios.CodEstado_Civil And tblFuncionarios.CodPais=tblPais.CodPais And tblFuncionarios.CodProvincia=tblProvincias.CodProvincia And tblFuncionarios.CodMunicipio=tblMunicipios.CodMunicipio And tblFuncionarios.CodHabilitacoes=tblHabilitacoes.CodHabilitacoes And tblFuncionarios.CodCategoria = tblCategorias.CodCategoria And tblFuncionarios.CodDepartamento = tblDepartamentos.CodDepartamento And tblFuncionarios.CodGenero = tblGeneros.CodGenero And tblBancos.CodBanco=tblFuncionarios.CodBanco And tblFuncionarios.CodFuncionario = " + comboBox + " ";

    quarta-feira, 18 de janeiro de 2017 22:21
  • O select que estou a utilizar é este:

                string comando = "SELECT Funcionario, Num_BI, Data_Nascimento, Estado_Civil, Pais, Provincia, Municipio, Habilitacoes, Categoria, Departamento,Genero,Num_Conta,Iban,Salario,Num_Contribuinte, Num_Seguranca_Social,Telefone,Email,Skype,Banco,Foto FROM tblFuncionarios,tblEstado_Civil,tblPais,tblProvincias,tblMunicipios,tblHabilitacoes,tblCategorias,tblDepartamentos,tblGeneros,tblBancos WHERE tblEstado_Civil.CodEstado_Civil=tblFuncionarios.CodEstado_Civil And tblFuncionarios.CodPais=tblPais.CodPais And tblFuncionarios.CodProvincia=tblProvincias.CodProvincia And tblFuncionarios.CodMunicipio=tblMunicipios.CodMunicipio And tblFuncionarios.CodHabilitacoes=tblHabilitacoes.CodHabilitacoes And tblFuncionarios.CodCategoria = tblCategorias.CodCategoria And tblFuncionarios.CodDepartamento = tblDepartamentos.CodDepartamento And tblFuncionarios.CodGenero = tblGeneros.CodGenero And tblBancos.CodBanco=tblFuncionarios.CodBanco And tblFuncionarios.CodFuncionario = " + comboBox + " ";

     Bom dia,

      Eu quero dizer como atribui o valor da foto retornado pela sua select por exemplo:

    while(dataReader.Read())
    {
    
     Funcionario.Foto = (bytes[])dataReader["Foto"];
    
    }

     Seria nessa parte, uma outra questão usando debug nesse ponto qual o número de bytes que é retornado antes

    de atribuir a alguma variavel.

    quinta-feira, 19 de janeiro de 2017 11:43
  • É certo passei por ali... A quantidade de bytes que apresenta antes é nulo depois é de 50 que é muito pouco e o normal tinha que ser 1048576 bytes. É ali onde reside o problema... Não está apuxar todos bytes do banco de dados e o porque não sei...

    A função abaixo está reportada no erro.... 

    while(dataReader.Read())
    {

     Funcionario.Foto = (bytes[])dataReader["Foto"];

    }
    quinta-feira, 19 de janeiro de 2017 12:08
  • É certo passei por ali... A quantidade de bytes que apresenta antes é nulo depois é de 50 que é muito pouco e o normal tinha que ser 1048576 bytes. É ali onde reside o problema... Não está apuxar todos bytes do banco de dados e o porque não sei...

    A função abaixo está reportada no erro.... 

    while(dataReader.Read())
    {

     Funcionario.Foto = (bytes[])dataReader["Foto"];

    }

     Certo, então segue essas premissas :

     1- Verifique se sua coluna no banco de dados está como varbinary(MAX).

     2- Em seu banco de dados verifique um registro que está com problemas e veja o tamanho dele usando

    essa instrução "SELECT DATALENGTH(FOTO) FROM SUATABELA".

     3 - Poste todo o codigo que faz essa busca e atribui ao campo.

     Segue esses passos e informe os resultados.

     

    quinta-feira, 19 de janeiro de 2017 12:24
  • A minha coluna no banco de dado é do tipo image...

    Apliquei esta instrução: SELECT DATALENGTH(FOTO) FROM SUATABELA, o tamanho é de 13 bytes...

    É ali onde reside o problema Daniel... 

    Outro sim Daniel na hora de mandar para o banco de dados através de um Insert apliquei um bug pude observar que a quantidade de bytes é completa ou seja de 6534 bytes mas só cai no banco de dados 13 bytes.
    quinta-feira, 19 de janeiro de 2017 23:48
  • A minha coluna no banco de dado é do tipo image...

    Apliquei esta instrução: SELECT DATALENGTH(FOTO) FROM SUATABELA, o tamanho é de 13 bytes...

    É ali onde reside o problema Daniel... 

    Outro sim Daniel na hora de mandar para o banco de dados através de um Insert apliquei um bug pude observar que a quantidade de bytes é completa ou seja de 6534 bytes mas só cai no banco de dados 13 bytes.
     Altera o tipo da coluna para testar de Image para varbinary(MAX), acredito que vai resolver...
    sexta-feira, 20 de janeiro de 2017 09:44
  • 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, 23 de janeiro de 2017 11:33
    Moderador