Usuário com melhor resposta
Testar campo binary com null

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
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
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/- Sugerido como Resposta Seilor Bonancio JuniorModerator segunda-feira, 14 de maio de 2012 12:25
-
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
-
-
-
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
-
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
-
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
EndDirceu
Dirceu Martins de Azevedo Grupo e-usinas Piracicaba/SP MSN:dirceuazevedo@hotmail.com SKYPE: dirceu.martins.azevedo
-
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
-
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