• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

teckV

Gerir Erros em VB.NET - Bloco Try-Catch-Finally-End Try

3 mensagens neste tópico

um dos maiores avanços do VB.NET foi a inclusão de uma estrutura de gestão de erros tipo TRY...CATCH...

se não criarem nenhuma estrutura de gestão de erros acontece o pior.. se acontecer um erro o utilizador final (quem vai executar os vossos programas) vai ver umas mensagens de debug estranhissimas (no ASP.NET pode não ver consoante configuração) e o programa rebenta (deixa de funccionar e o utilizador têm de o fechar e inicar de novo)... dá muito mau aspecto e é má conduta de desenvolvimento

para evitar isso usa-se a gestão de erros...

com o .NET o VB passou a ter uma estrutura de gestão de erros ao nivel das mais poderosas linguagens com a funcionalidade TRY...CATCH

Bloco Try

Ainda no bloco Try podemos utilizar blocos Try...Catch aninhados, ou seja, se a exceção não for manipulada por pelo bloco aninhado ela é entregue ao bloco Try externo, em que ela terá mais uma chance de ser tratada.

Podemos também utilizar o Exit Try para sairmos do bloco Try.

Bloco Catch

Podemos utilizar a técnica de aninhamento no bloco Catch também, ou seja, você pode ter por exemplo cinco manipuladores de exceções, uma para cada exceção específica.

Temos também Throw que serve para você lançar suas próprias exceções ou até mesmo lançar a exceção ocorrida para que ela seja tratada. Veremos mais abaixo um exemplo de como utilizá-lo.

OBS.: Devemos sempre escrever os manipuladores de exceções do mais específico ao mais genérico, pois se fizermos ao contrário, ele sempre manipulará o erro com o manipulador genérico de exceção.

Bloco Finally

O bloco Finally contém código de limpeza/encerramento, como por exemplo, fechar conexões com Banco de Dados, liberar objetos, etc. Lembrando que o bloco Finally é executado independentemente se houve ou não uma exceção.

Para finalizar sobre o Try...Catch...Finally devemos levar em consideração que se tratam de blocos de código, logo se declararmos uma variável dentro do bloco Try ela será vista apenas dentro ele, os blocos Catch e Finally não poderão manipular tais variáveis, acusando que a mesma não foi declarada. Para contornar isso, declare as variáveis que deseja utilizar antes do bloco Try...Catch...Finally.

ex:

Sub DoSomething()
       Try      'inicio da estrutura de captura de erros
              'código para fazer o que pretendem
       Catch e as Exception
              'caso aconteça um erro o fluxo do código vêm para aqui e podem fazer alguma acção para cuidar dele.
              'Podem criar codigo para dar a volta ao erro ou podem criar mensagens de aviso de erro personalizadas
              Response.Write ("Ocorreu o erro: " & e.toString())
       Finally
              'o bloco Finally é executado independentemente se houve ou não uma exceção
       End Try

End Sub 

o codigo passa a ficar dentro desta estrutura e captura erros eviando-os para o CATCH

Primeiro incluem o vosso código (as partes em que querem capturar eventuais erros) dentro de uma estrutura Try... Catch...Finaly

Iniciam a estrutura com TRY... segue-se o código e no fim criam um bloco Catch que o que faz é que recebe o fluxo do código caso se encontre um erro..

o CATCH pode ser feito de diversas formas:

Podem utilizar a clausula When para criar uma condição tipo ... quando o erro for este faz

When

Catch When Err.Number = 5
            lblWebConfig.Text = "Servidor já introduzido!"

CATCH genérico:  'recebe o fluxo do codigo qualquer que seja o erro e emite uma excepção genérica

        Catch Ex As Exception
            deb.WriteLine("erro = " & Ex.Message)
            lblWebConfig.Text = "Ocorreu um erro na introdução dos dados!!  Verifique os dados a introduzir"

ou podem capturar excepções especificas como as execpções do SQL

SqlException

Catch SQLExp As SqlException
            Dim errNum As Int16 = SQLExp.Number
            deb.WriteLine("deu-se o erro numero = " & errNum)

topicos na web sobre este tema

em PT.br

http://www.linhadecodigo.com.br/artigos.asp?id_ac=166&pag=1

http://www.linhadecodigo.com.br/artigos.asp?id_ac=170

http://www.c-sharpcorner.com/vbnet/vbarticles/VBASPExHSSK.asp

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma das coisas muito bem alteradas aquando do upgrade para vb.net.... em vb6 aquilo era uma rebaldaria em error Handling.

Bom tut.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

lol

ainda mantenho esses maus hábitos....

on error resume next

on error goto bla....bla....

só em alguns casos.....lol ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora