Usuário com melhor resposta
Esclarecimento

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
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.- Marcado como Resposta Robson William SilvaModerator segunda-feira, 23 de janeiro de 2017 11:33
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.
-
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
-
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.
-
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...
- Editado Angolano de Ouro terça-feira, 17 de janeiro de 2017 10:28
-
-
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 + " ";
-
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.
-
É 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"];
}- Editado Angolano de Ouro quinta-feira, 19 de janeiro de 2017 12:10
-
É 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.
-
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.- Editado Angolano de Ouro sexta-feira, 20 de janeiro de 2017 00:39
-
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.- Marcado como Resposta Robson William SilvaModerator segunda-feira, 23 de janeiro de 2017 11:33
-
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.