none
Testar campo binary com null RRS feed

  • Pergunta

  • Tenho uma tabela com 4 campos binários onde gravo 4 fotos.

    Tenho que criar mais um campo binário na tabela. O campo foi criando.

    A partir de agora, terei de exibir os dados gravados nesse campo, que começou a receber dados nesse momento.

    A tabela já tem outros 20 mil regiitros. Quando vou exibir o resultado da erro, pois para os registros anteriores esta gravado null no campo. 

    Meu cógido esta abaixo.

    Como faço para checar se o camo FOTO5 que vem da procedure é nulo e se for ignora-lo?

    se não for nulo continua o processo normal!

    protected void Page_Load(object sender, EventArgs e)
        {
            string id = Request.QueryString["id"];

            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["VRIConnectionString"].ConnectionString);
            SqlCommand command = new SqlCommand("Usp_VRI_03_Imagens5_Ofertas_Detalhes", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add("ch_cod", SqlDbType.Int).Value = Int32.Parse(id);

            conn.Open();
            SqlDataReader r = command.ExecuteReader();

            if (r.Read())
            {
                byte[] imgData5 = (byte[])r["FOTO5"];
                Response.BinaryWrite(imgData5);
            }
            conn.Close();
        }

    Grato

    Dirceu


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    domingo, 13 de maio de 2012 22:51

Respostas

  • Bom dia Dirceu, veja se isto te ajuda:

    if (r.Read())
    {
    	if(!r.IsDBNull(0))
    	{
    		byte[] imgData5 = (byte[])r["FOTO5"];
    		Response.BinaryWrite(imgData5);
    	}
    	else
    	{
    		string filePath = "SEU CAMINHO DO ARQUIVO PADRÃO AQUI";
    		
    		byte[] buffer;
    		
    		FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    		
    		try
    		{
    			int length = (int)fileStream.Length;  // pegando tamanho do arquivo
    			buffer = new byte[length];            // criando buffer
    			int count;                            
    			int sum = 0;                          
    
    			// Faça até o retorno do método de leitura 0 (fim do fluxo foi alcançado)
    			while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
    				sum += count;
    		}
    		finally
    		{
    			fileStream.Close();
    		}
    		
    		Response.BinaryWrite(buffer);
    	}
    }


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Harley Araujo terça-feira, 15 de maio de 2012 13:17
    segunda-feira, 14 de maio de 2012 13:38

Todas as Respostas

  • Dirceu tem um método chamado IsDBNull(), você informa o numero da coluna a ser verificada, caso a condição seja verdade, o retorno é null, caso contrario é falso:

    if (r.Read())
    {
    	if(!r.IsDBNull(0))
    	{
    		byte[] imgData5 = (byte[])r["FOTO5"];
    		Response.BinaryWrite(imgData5);
    	}
    	else
    	{
    		//Sua rotina quando não tiver retorno
    	}
    }

    Referencia:
    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.isdbnull.aspx


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    segunda-feira, 14 de maio de 2012 00:18
  • Olá Vitor,

    Obrigado pela informação, funcionou perfeitamente.

    Poderia me informar mais uma coisa. As imagens que tenho gravadas a partir de agora aparecem.

    Mas os campos antigos onde não tem imagem gravada e esta null, aparede aquele "X" de imagem inexistente.

    Usando o código que me passou:

    if (r.Read())
    {
    	if(!r.IsDBNull(0))
    	{
    		byte[] imgData5 = (byte[])r["FOTO5"];
    		Response.BinaryWrite(imgData5);
    	}
    	else
    	{
    		//Sua rotina quando não tiver retorno
    	}
    }

    Tem como fazer o seguinte:

    Quando o campo for igual a null, atribuir ao campo uma imagem, por exemplo, imagem não disponível. Se necessário posso gravar esta imagem no mesmo diretorio onde esta o cófigo.

    Grato.

    Dirceu


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    segunda-feira, 14 de maio de 2012 06:20
  • no select coloca isnull(campo,'0') as campo

    Junior

    segunda-feira, 14 de maio de 2012 11:16
  • Olá Junior,

    Não entendi!

    Dirceu


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    segunda-feira, 14 de maio de 2012 11:57
  • Olá pessoal,

    As imagens que tenho gravadas a partir de agora aparecem.

    Mas os campos antigos onde não tem imagem gravada e esta null, aparede aquele "X" de imagem inexistente.

    Usando o código que me passou:

    if (r.Read())
    {
    	if(!r.IsDBNull(0))
    	{
    		byte[] imgData5 = (byte[])r["FOTO5"];
    		Response.BinaryWrite(imgData5);
    	}
    	else
    	{
    		//Sua rotina quando não tiver retorno
    	}
    }

    Tem como colocar nos campos antigos uma imagem, por exemplo:

    Se imgData5 = null, atribuir a imgData5="imagem152,gif"

    Grato,

    Dirceu


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    segunda-feira, 14 de maio de 2012 12:20
  • Para trazer essas imagens vc faz um select correto ? no seu select no campo das fotos vc coloca is null então vc trata o is null e coloca uma imagem padrão para esses casos, como te mostrei lá no select ou então no teste que vc tem no seu teste vc coloca uma imagem para esses casos.

    Junior

    segunda-feira, 14 de maio de 2012 12:26
  • Olá Junior;

    Faço o select nesta procedure, como ficaria?

    [dbo].[Usp_VRI_03_Imagens5_Ofertas_Detalhes]

     @CH_COD  AS INT
    as
    Begin
    Declare @TotalContador int
    SET NOCOUNT ON
    select Foto5 FROM Tb_Pec_02_VRI_Imoveis_Negocios WHERE ch_cod = @ch_cod 
    End

    Dirceu


    Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo

    segunda-feira, 14 de maio de 2012 13:01
  • vc poderia fazer como te falei select isnull(foto5,'0') as foto5 from ....

    Assim vc não tras null no seu campo ai no teste da sua aplicação vc verifica se o campo foto5 = "0" se for vc tras uma imagem padrão, se não vc tras a imagem.

    ou vc pode deixar seu select como está e no seu teste fazer String.isnullorempty(foto5) pode ser assim tb


    Junior

    segunda-feira, 14 de maio de 2012 13:14
  • Bom dia Dirceu, veja se isto te ajuda:

    if (r.Read())
    {
    	if(!r.IsDBNull(0))
    	{
    		byte[] imgData5 = (byte[])r["FOTO5"];
    		Response.BinaryWrite(imgData5);
    	}
    	else
    	{
    		string filePath = "SEU CAMINHO DO ARQUIVO PADRÃO AQUI";
    		
    		byte[] buffer;
    		
    		FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    		
    		try
    		{
    			int length = (int)fileStream.Length;  // pegando tamanho do arquivo
    			buffer = new byte[length];            // criando buffer
    			int count;                            
    			int sum = 0;                          
    
    			// Faça até o retorno do método de leitura 0 (fim do fluxo foi alcançado)
    			while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
    				sum += count;
    		}
    		finally
    		{
    			fileStream.Close();
    		}
    		
    		Response.BinaryWrite(buffer);
    	}
    }


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/

    • Marcado como Resposta Harley Araujo terça-feira, 15 de maio de 2012 13:17
    segunda-feira, 14 de maio de 2012 13:38