Usuário com melhor resposta
Onde e pra que utilizar o try...catch?

Pergunta
-
Já cheguei a ler os outros tópicos sobre o assunto, porém ainda tenho dúvida, pois não vejo porque utilizar o try catch para coletar um erro se posso coletá-lo no global. asax. Faço meus sistemas utilizando um código de redirecionamento no evento de erro do global.asax. Assim consigo redirecionar para uma página de erro genérica e amigável ao usuário e ainda salvar o erro no banco para correção posterior.
E gostaria de saber tb, onde utilizar... Nas funções do codigo behind de cada página, nas classes de negócio, nas classes de entidade.
Segue código global.asax
protected void Application_Error(object sender, EventArgs e) {
// Objeto para receber o erro e outra informaçoes Exception obj_exeption = new Exception();
// Minha classe de negócio para tratar exceções ExceptionBO exceptions = new ExceptionBO();
// Minha classe de entidade da tabela exception gerada pelo entity framework exception exception = new exception(); obj_exeption = Server.GetLastError().GetBaseException(); exception.erro = obj_exeption.Message; exception.source = obj_exeption.Source; exception.url_anterior = Request.Url.AbsoluteUri; exception.url_posterior = Request.UrlReferrer.AbsoluteUri; exception.data_registro = DateTime.Now; exceptions.Add(exception); exceptions.SaveChanges(); exceptions = null; exception = null; obj_exeption = null; Response.Redirect("pag-erro.aspx"); }
Respostas
-
Junior o uso do try...catch é exatamente para tratar um erro usamos principalmente qdo vamos acessar o banco de dados, pois podem ocorrer problemas inerentes a aplicação, tipo o servidor de banco nao está on line então vc tratar esse erro e mostra na página para o usuário que ocorreu o erro, o tratamento vai do desenvolvedor, se for um erro de banco vc pode pegar o código do erro gerado e criar uma mensagem mais explicativa para o usuário ou então uma generica tipo "erro de acesso ao banco de dados" eu sempre trato os dois faço assim
try { } catch (Exception ex) { if (ex.Message.ToLower().Contains("innerexception")) { FailureText.Text = ex.InnerException.Message; } else { FailureText.Text = ex.Message; } }
Junior
- Marcado como Resposta JuniorMandrakeCsharp quinta-feira, 23 de agosto de 2012 14:35
Todas as Respostas
-
Junior o uso do try...catch é exatamente para tratar um erro usamos principalmente qdo vamos acessar o banco de dados, pois podem ocorrer problemas inerentes a aplicação, tipo o servidor de banco nao está on line então vc tratar esse erro e mostra na página para o usuário que ocorreu o erro, o tratamento vai do desenvolvedor, se for um erro de banco vc pode pegar o código do erro gerado e criar uma mensagem mais explicativa para o usuário ou então uma generica tipo "erro de acesso ao banco de dados" eu sempre trato os dois faço assim
try { } catch (Exception ex) { if (ex.Message.ToLower().Contains("innerexception")) { FailureText.Text = ex.InnerException.Message; } else { FailureText.Text = ex.Message; } }
Junior
- Marcado como Resposta JuniorMandrakeCsharp quinta-feira, 23 de agosto de 2012 14:35
-
Bom dia Junior_luiz, primeiramente obrigado pela atenção.
Concordor com você, mas pra que utilizar o codigo try cacth se através desta linha:
obj_exeption = Server.GetLastError().GetBaseException();
Eu consigo pegar o erro de qualquer página, tratá-lo e exibi-lo de forma mais amigável para o usuário. Percebe? Não vejo porque fazer o tratamento especifico dentro de cada método, função, se posso captá-lo no global da mesma forma. -
Bom dia Junior_luiz, primeiramente obrigado pela atenção.
Concordor com você, mas pra que utilizar o codigo try cacth se através desta linha:
obj_exeption = Server.GetLastError().GetBaseException();
Eu consigo pegar o erro de qualquer página, tratá-lo e exibi-lo de forma mais amigável para o usuário. Percebe? Não vejo porque fazer o tratamento especifico dentro de cada método, função, se posso captá-lo no global da mesma forma.Junior imagine o seguinte cenario, onde o usuario tenha que preencher 40 campos de entrada na sua pagina, neste meio tempo ele preencheu tudo e quando clicou no botão algum erro não tratado é disparado, é meio frustante para ele ser redirecionado para uma pagina de erro, sem ao menos saber oque aconteceu.
A dupla try/catch e o método Application_Error dentro Global.asax é uma excelente combinação para tratamento de erros esperados e não esperados.
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/ -
O bloco try catch serve para tratamento de exceções.
Ao utilizarmos o try catch, devemos ter em mente que para capturar as exceções partimos das mais específicas(IoException,SQLException,RunTimeException,...) para as mais genéricas(Exception).
Atenciosamente, Marcio Nogueira Cardoso Pinto.
-
Junior a abordagem para tratamento de erro vc adota a que mais lhe convier, mais o try catch como falou o Marcio é para tratamento de exceções o objetivo é pegar o erro se ele acontecer e tratá-lo vc pode até ter um finally tb, mais se vc já tem a abordagem pelo global.asax e ele resolve seus problemas, então não mude de abordagem. Eu só acho que o try.. catch é mais fléxivel.
Junior
-
Bom dia Junior_luiz, primeiramente obrigado pela atenção.
Concordor com você, mas pra que utilizar o codigo try cacth se através desta linha:
obj_exeption = Server.GetLastError().GetBaseException();
Eu consigo pegar o erro de qualquer página, tratá-lo e exibi-lo de forma mais amigável para o usuário. Percebe? Não vejo porque fazer o tratamento especifico dentro de cada método, função, se posso captá-lo no global da mesma forma.Junior imagine o seguinte cenario, onde o usuario tenha que preencher 40 campos de entrada na sua pagina, neste meio tempo ele preencheu tudo e quando clicou no botão algum erro não tratado é disparado, é meio frustante para ele ser redirecionado para uma pagina de erro, sem ao menos saber oque aconteceu.
A dupla try/catch e o método Application_Error dentro Global.asax é uma excelente combinação para tratamento de erros esperados e não esperados.
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/kkkk....40 campos é realmente frustrante...
Fiquei pensando, se o erro acontece, de certa forma não há como voltar atrás, ou seja, o leite já foi derramado. Desta forma, não vejo problema quando a um erro genérico, já que uma "desculpa" será gerada de qualquer forma. O usuário ficará triste da mesma forma com uma mensagem do tipo "Não foi possível se conectar ao se banco de dados." ou outra mais genérica do tipo "O servidor se comportou de forma inesperada." A diferença tá na quantidade de try...catch que se eliminaria da codificacao...
-
O exemplo do MSDN também pode ajudar a clarear um pouco as idéias: http://msdn.microsoft.com/en-us/library/0yd65esw(v=vs.80).aspx
Abraços!
-
Infelizmente não temos como fugir dessa situação, o que vc pode fazer é usar script assim vc obriga o usuário é digitar somente informações que vc espera, tipo em campo que só aceita números e como te falei só tratamos os erros após algum evento não temos como fazer isso a todo momento.
Junior