none
como faz p/ testar uma imagem vazia? RRS feed

  • Pergunta

  • tenho uma procedure e preciso testar se não esta recebendo um campo vazio p/ não dar erro. segue a procedure:

    LTER PROCEDURE  up_UpdateDadosPrefeitura (

    @id as int,
    @nome nvarchar(100),
    @endereco nvarchar(100),
    @numero nvarchar(10),
    @municipio nvarchar(50),
    @bairro nvarchar(50),
    @estado nvarchar(50),
    @iss nvarchar(10),
    @img image
    )
    AS

          begin
    if (@img is null) ' fora null qual outra jeito de testar???
           update dm_DadosPrefeituraIss set
          Prefeitura = @nome,
          Endereco = @endereco,
          Numero = @numero,
          Bairro =  @bairro,
          Municipio = @municipio,
          Estado = @estado,
          stCompensaIss = @iss
    where idPrefeitura = @id
    else
           update dm_DadosPrefeituraIss set
          Prefeitura = @nome,
          Endereco = @endereco,
          Numero = @numero,
          Bairro =  @bairro,
          Municipio = @municipio,
          Estado = @estado,
          stCompensaIss = @iss,
          ObjLogomarcaPrefeitura =  @img
    where idPrefeitura = @id

      end
    GO

    quinta-feira, 29 de março de 2007 12:12

Respostas

  • Lissandra,

    Provavelmente vc deve estar usando o controle file e se vc fizer assim  File1.PostedFile.ContentLength / 1024 e vc vai ter o valor em KB e se esse valor for maior que o valor máximo vc dar uma mensagem.

    Onde esta File1 vc coloca o id do seu controle.

    Espero ter ajudado,

    []'s
    sexta-feira, 13 de abril de 2007 13:25

Todas as Respostas

  • Lissandra,

    @id as int,
    @nome nvarchar(100),
    @endereco nvarchar(100),
    @numero nvarchar(10),
    @municipio nvarchar(50),
    @bairro nvarchar(50),
    @estado nvarchar(50),
    @iss nvarchar(10),
    @img image = null

    AS 


    IF @img IS NULL
    BEGIN
              RAISERROR('Faltam informações....', 11, 1)
              RETURN
    END


    Assim o valor pode vir nulo mais vc gera uma exceção quando ele for nulo e nao continua a execucao da procedure.


    Espero ter ajudado,


    []'s
    quinta-feira, 29 de março de 2007 16:46
  • entao eu nao posso simplesmente não usa-lo?

    como eu faço entao? guardo o valor dele que ja esta preenchido no banco, caso eu não va editar a figura?

    quinta-feira, 29 de março de 2007 19:33
  • Olá Lissandra!

     

    Penso que o mais recomendado é verificar a integridade dos dados antes de enviar para a stored procedure.

    Já pensou se no futuro for necessário mudar as propriedades de uma variável? Dessa forma você terá que mudar a stored procedure também.

    Utilize uma stored procedure somente para interagir com o banco de dados.

     

    Espero ter ajudado!

    sexta-feira, 30 de março de 2007 12:13
  • tudo bem alexandre, mas se eu não quiser preencher toda vez o parametro que pega a imagem? como eu faço? dois eventos? um com a imagem e outro sem?
    sexta-feira, 30 de março de 2007 12:41
  • Lissandra,


    Você pode simplesmente tirar o if que eu coloquei na sua proc pq ai ele nao vai validar e vai aceitar o parametro null pq eu coloquei la
    @img = null

    E na sua camada de acesso a dados vc simplesmente valida, assim:

    if(imagem != null)
       entao vc passa a imagem para o seu SQLParameters
    else
        vc passa para o seu SQLParameters DBNnull.Value;



    Espero ter ajudado,



    []'s
    sexta-feira, 30 de março de 2007 16:55
  • Olá Diego,

     assim também não vai servir, pois vai substituir o valor da imagem armazenado no banco por um valor null, e não é isso que eu quero, queria simplesmente tratar o update, p/ caso a pessoa não selecione uma nova imagem, não mexa naquela que esta la armazenada no banco.

    quinta-feira, 5 de abril de 2007 11:57
  • Lissandra,


    Vc so precisa na sua proc tratar isso, testando se o valor do parametro imagem for null entao vc nao atualiza ele caso contrario vc atualiza, se bem q normalmente quando temos telas de alterar todos dados são exibidos inclusive a imagem e ai qdo vc for passar vc ja passa ela e quando nao passar nada é pq o usuário nao quer imagem.


    Fica a dica.


    []'s
    quinta-feira, 5 de abril de 2007 12:41
  • Certo Diego e se em um primeiro momento eu não tiver a imagem armazenada no banco? como eu faço p/ não dar erro quando estou pegando todos os dados do banco?

    tipo p/ exibir os dados na tela estou fazendo uma rotina que le os dados atraves de um data reader e coloco num arraylist:

    como eu faço p/ testar se a imagem ta vindo vazia e não carrega-la?

    Public Function GetPrefeitura() As IList

    Dim dr As SqlClient.SqlDataReader

    dr = ObjPrefeituraDao.ListSqlDataReader

    '

    Dim arr As New ArrayList

    While dr.Read

    obj = New PrefeituraValue

    obj.idprefeitura = dr.Item("idPrefeitura")

    obj.nomePrefeitura = dr.Item("Prefeitura")

    obj.enderecoPrefeitura = dr.Item("Endereco")

    obj.numPrefeitura = dr.Item("Numero")

    obj.bairroPrefeitura = dr.Item("Bairro")

    obj.municipioPrefeitura = dr.Item("Municipio")

    obj.estadoPrefeitura = dr.Item("Estado")

    obj.issPrefeitura = dr.Item("stCompensaIss")

    obj.logoPrefeitura = dr.Item("objLogoMarcaPrefeitura")

     

    arr.Add(obj)

    End While

    Return arr

    End Function

    quinta-feira, 5 de abril de 2007 12:57
  • Lissandra,

    O próprio DataReader tem um método que testa o valor de uma coluna, assim:

    dr.IsDBNull(index da coluna)//esse método só recebe o index da coluna e não o seu nome.

    Esse método retorna se a coluna x tem ou não valor.


    Espero ter ajudado,


    []'s
    quinta-feira, 5 de abril de 2007 13:16
  • Certo Diego, agora me diga uma coisinha, como é que eu faço para guardar o valor da imagem, no caso o lenght

    para quando eu for atualizar os dados, simplesmente colocar la o valor novamente?

    quinta-feira, 5 de abril de 2007 14:13
  • Lissandra,

    vc pode usar o viewstate da página, ou vc pode converter a imagem e carregar ela em um controle img, ou entao vc pode guardar num campo hidden definido pra rodar no servidor.

    Espero ter ajudado,


    []'s
    quinta-feira, 5 de abril de 2007 17:02
  • Oi Diego, ja resolvi este problema e agora como eu faço para não deixar que cadastrem uma imagem maior do que a que deveria ser cadastrada? pois a imagem que eu vou usar vai ser tipo um logo do sistema, deve ter em torno de 5,20 kb(estou me baseando na que estou usando de teste, pois ela esta no tamanho exato que eu preciso).
    sexta-feira, 13 de abril de 2007 12:16
  • Lissandra,

    Provavelmente vc deve estar usando o controle file e se vc fizer assim  File1.PostedFile.ContentLength / 1024 e vc vai ter o valor em KB e se esse valor for maior que o valor máximo vc dar uma mensagem.

    Onde esta File1 vc coloca o id do seu controle.

    Espero ter ajudado,

    []'s
    sexta-feira, 13 de abril de 2007 13:25