Igara - Sintegra
quinta-feira, 29 de julho de 2010
Busca  
Porta 80 Web Hosting
 :: Acessibilidade
Ir para conteúdo principal: ALT + 1
 :: Participe
Seja um autor de CD/DVD de Treinamento
Publique um artigo
Publique uma oportunidade
Publique uma notícia
Publique um curso
Publique uma dica
Publique um código
 :: Informativo
Receba nossos informativos por e-mail.
E-mail:   
 
Digite a palavra abaixo:  
 
 
 :: Oportunidades
Cadastrar oportunidades
Gerenciar suas oportunidades
Cadastrar nova empresa
 :: Especiais
Básico de C++
C++ Builder
Curso ASP.NET 3.5 em VB.NET e C#
Guia Prático de HTML
Testes com Visual Studio Team System 2008
 :: Desenvolvimento
ActionScript
ADO.NET
ASP
ASP.NET
Automação Comercial
C#
C/C++
Coldfusion
CSS
Delphi
Disp. Móveis
HTML
Java
Javascript
LSL (Second Life)
Modelagem
PHP
Python
Sharepoint
Silverlight
SQL
VBA (Office)
Visual Basic
Visual Basic .NET
Visual Fox Pro
WCF/WPF
Web Services
XML
 :: Infra
BizTalk Server
CRM
Exchange Server
ForeFront / Antigen / IAG
Interoperabilidade
ISA Server
Linux
MOF
MS Dynamics CRM
Network
OCS / LCS
Outlook
Powershell e Scripts
Redes
Segurança
System Center e Gerenciamento
Virtualização
Windows
Windows Server
 :: Banco de Dados
Access
Caché
Firebird
Interbase
MySQL
Oracle
SQL Server
Sybase
 :: Gerência
Arquitetura
Ciclo de Vida de Desenvolvimento
Controle de Versão
Estimativas
Metodologias
MOF
Qualidade e Testes
 :: Design
Corel
Flash
Photopaint
Photoshop
 :: Livros
Análise Sistemas
Aplicativos
Banco de Dados
Certificação
Design e CAD
Gerência
Hardware
Internet
Programação
Programação Web
Rede
Segurança
Servidores
Sistemas Operacionais
 :: CDs/DVDs
Desenvolvimento
Infra
Design
 :: E-Books
.NET 2.0 (VS 2005)
.NET 1.1 (VS 2003)
SQL Server
Excel 2007
Excel 2003
Access 2003
ASP 3.0
Delphi
Java
Artigos
.NET: Criando uma Classe de Exception em sua aplicação
Por: Eder Nascimento
[Entre em contato com o autor ]
Atualmente é Analista/Desenvolvedor Sênior no Grupo EASE, empresa que atua em desenvolvimentos de sistemas integrados para gestão de Shopping Center e Empreendimentos há mais de 10 anos no mercado nacional. Foi instrutor VB. Net durante 3 anos em uma instituição reconhecida, integrando mais de 2000 alunos ao mundo .Net.
Feed de artigos.
Feed de artigos deste autor.
Gere seu feed personalizado  
.NET: Criando uma Classe de Exception em sua aplicação
Publicado em: 01/02/2006

É indispensável você ter na sua aplicação uma classe de erros. O processo que vou mostrar neste artigo facilita muito a vida do desenvolvedor durante o desenvolvimento da aplicação e até mesmo como “feedback” quando o sistema estiver em uso para detectar possíveis erros nas telas.

O exemplo aqui demonstrado pode ser aplicado em seu projeto em desenvolvimento ou criado a partir de um projeto novo. Recomendo que sejam aplicados em ambos os casos, se isto for possível e não venha a atrapalhar o cronograma do projeto. Também pode ser adaptado a qualquer tipo de projeto, como: ASP.Net, C#, etc.

 

Vamos lá, mãos à obra:

 

  1. Abra seu Projeto ou crie um novo.
  2. Abra a Solution Explorer:

 

 

  1. Clique com o botão direito sobre o nome do Projeto e escolha: Add > Add Class

 

  1. Nomeie-a como: clsException
  2. Clique em Open

 

 

  1. Configure sua classe de acordo com o modelo abaixo:

 

 

Imports System.Windows.Forms

Imports System.Data

Imports System.Data.SqlClient

Imports System.IO

 

Public Class clsException

 

    Inherits System.ApplicationException

 

    Private _Excecp As Exception   'Simboliza o Exception gerado

 

    'Montagem do Sub New, servirá para instanciarmos a Classe.

    'E passar o Exception como Parâmetro

    Sub New(ByRef ex As Exception)

    _Excecp = ex

    AvalException(_Excecp)

    End Sub

 

    Private Sub AvalException(ByVal ex As Exception)

 

    'Tratamento dos possíveis Exceptions

    'Aqui você pode configurar suas mensagens de erro de acordo com o exception

    If (TypeOf ex Is System.ArgumentOutOfRangeException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.IO.FileLoadException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

      MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.IO.FileNotFoundException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.IO.DirectoryNotFoundException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.OverflowException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.StackOverflowException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is InvalidCastException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is System.NullReferenceException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is InvalidOperationException) Then

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

 

    ElseIf (TypeOf ex Is SqlException) Then

 

    'Erros de SQL

    Dim ex1 As SqlException = ex

    Select Case ex1.Number

 

    Case 547

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    Case 208

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

      MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    Case 137

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    Case 170

      MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    Case 207

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

      MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    Case Else

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

 

    End Select

    Exit Sub

 

    Else

    'Caso não seja nenhum dos Exceptions declarados

    MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, _

    MessageBoxButtons.OK, MessageBoxIcon.Error)

    Exit Sub

    End If

    End Sub

 

End Class

 

 

Perceba que criamos vários tipos de Catch, para conseguirmos filtrar detalhadamente os erros encontrados em nossa aplicação.

 

 

 

 

  1. Agora nos blocos de “Try Catch” da sua aplicação utilizaremos um procedimento que irá chamar a classe de exception e retornará o erro mais especifico. Veja um exemplo de como deverá ser usado:

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

    Handles MyBase.Load

 

    'Este processo irá gerar um erro

    Dim Conn As SqlConnection

    Dim StrConn As String

    StrConn = "server=sqlCli; initial catalog=Clientes; uid=app; pwd="

 

    Conn = New SqlConnection

    Conn.ConnectionString = StrConn

 

    Try

 

    Conn.Open()

 

      Catch ex As Exception

    'Passamos o erro para a classe

    Dim excp As TratandoErros.clsException

    excp = New TratandoErros.clsException(ex)

    End Try

 

    End Sub

 

Conclusão:

 

Perceba que se fossemos aplicar todos os exceptions da classe em cada bloco de “Try Catch” teríamos repetição desnecessária de código, sem contar que cada vez que você descobrir um novo tipo de exception em sua aplicação, terá de aplicar em todos os blocos “Try Catch” da aplicação.

 

Outro procedimento importante que pode ser agregado a este artigo é o fato da configuração das mensagens de erros de exceptions em apenas um local, isto facilita muito a vida do desenvolvedor. Se desejar, você pode acrescentar ao Sub New da Classe o Byval _Tela as String e receber o nome da tela que gerou o Erro. Fazendo assim, você pode exibir o nome da tela no título da MessageBox.

 

Até o próximo artigo, e como sempre cito nos momentos difíceis: “Creio que há uma solução para isto!”.

 

Qualquer dúvida entre em contato comigo através do email: eder@grupoease.com.br

Clique aqui para fazer o download do código.





MS TechEd 2010



 

Inclua um comentário sobre o artigo Topo
Elogios e críticas são muito bem vindos, porém o comentário deve ter referência ao artigo em pauta.
O portal e o autor agradecem.
Nome:    
E-mail:      
Comentários:    
Digite a palavra abaixo:  
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
 
Comentários sobre o artigo Ver Todos comentários
Opa. Muito bom o artigo, valeu pela ajuda.

Gostaria de fazer uma perguntinha sobre essa classe "System.ApplicationException" e para isso vou comparar com uma linguagem antiga que usei por muito tempo ... :D

Em Delphi quando ia fazer um tratamento de exceção eu fazia a substituição do evento Application.OnException := MeuNovoEvento.

Desta maneira toda vez que o sistema executava uma exceção se ela não estivesse sendo tratada localmente iria ser tratada no meu novo evento MeuNovoEvento.

No seu exemplo não funciona assim (me desculpa se tiver entendido alguma coisa errada no exemplo), mas teria alguma maneira de fazer desta forma em .Net?
Quem enviou: Willimar
Postado em: 5/1/2010 0:00:00
Olá, Legal seu artigo, entendo o seu algoritmo e as possibilidades que ele permite, vejo que o Vanderson question o seguinte, se todas as condições executam a mesma tarefa do mesmo jeito não há por que ter varios if e um case. Vejo que vc exemplifica e simplifica e entendo a utilidade disso para o caso de customizar as mensagens de erro e tratar de acordo como o seu tipo ou ir além criar um arquivo XML como mensagens customizadas ou em vários idiomas e que você demonstra um algoritmo interessante, e fazer parte de uma classe base em site por exemplo.
Quem enviou: SpitFire
Postado em: 24/4/2006 0:00:00
Vanderson, você precisa identificar o tipo de erro, simplesmente para no lugar de ex.message, você colocar a SUA própria mensagem de erro personalizada.
Quem enviou: Paulo Dias
Postado em: 10/3/2006 0:00:00
Olá amigo, me interessei muito pelo artigo , mas como estou apena no começo em c #, nãi entendi muita coisa..

algume poderia colocar os codigos em c#, vlw!!
Quem enviou: João
Postado em: 14/2/2006 0:00:00
Então Vanderson, o objetivo do artigo é unificar todos os possíveis Exceptions para que os mesmos possam ser tratados em um só local e do jeito que você quiser. Se você ler o final do artigo vai perceber que acrescentei: "Outro procedimento importante que pode ser agregado a este artigo é o fato da configuração das mensagens de erros de exceptions em apenas um local ... " , isto indica que no exemplo não existe mensagem pré-definida, mas sim o próprio erro, que não deixa de ser uma mensagem. Pra você ver a facilidade da coisa, no meu sistema, abaixo da mensagem eu disparo um email me passando a Tela, a linha e mais alguns parametros que me ajudarão a encontrar o erro na aplicação. Espero ter esclarecido sua indignação, mas se você puder... da próxima vez deixa seu email que lhe envio um exemplo do que faço aqui.

Até mais
Quem enviou: Eder Nascimento
Postado em: 3/2/2006 0:00:00
Não ficou muito claro para mim.
Se em todas as condições do IF aparece o comando:
"MessageBox.Show(ex.Message, ex.TargetSite.DeclaringType.Name, MessageBoxButtons.OK, MessageBoxIcon.Error)" para q eu preciso perguntar de que tipo de é a exceção??

Quem enviou: Vanderson
Postado em: 2/2/2006 0:00:00
Parabéns pelo excelente artigo. Possuimos uma sistema que esta no mercado a mais de 2 Anos e cada vez que o cliente envia um Erro para nosso help desk é uma rotina muito ardua encontrar onde está o determinado erro.

Com este seu exemplo consegui adaptar no meu sistema esta classe e consigo filtrar exatamente onde está o erro, facilitando minha vida. ;-) Valew Eder!
Quem enviou: Roberto Moura da Silva
Postado em: 1/2/2006 0:00:00
Outros artigos do autor Topo
Personalizando as mensagens de sua aplicação
Artigos relacionados Topo
Acesso a Dados com ASP.NET - Parte 4
Acesso a Dados com ASP.NET - Parte 3
Acesso a Dados com ASP.NET - Parte 2
Acesso a Dados com ASP.NET - Parte 1
Usando DataSet Tipado com ASP.NET
Gerenciador de conteúdo ASP.NET MVC 2 - Kooboo
Criando um Leitor de Arquivos em ASP.NET
Criando um Leitor de RSS em ASP.NET
Trabalhando com Update Panel no ASP.NET
Como fazer Deploy no ASP.NET 4?
Utilizando jQuery para invocar Actions
Enviando Emails com ASP.NET usando System.Net.Mail
Criando editor de texto personalizado em Asp.Net
JQuery auto complete em Asp.Net
Autenticação via Claims no ASP.NET MVC
Detectando erro a todo custo
Explorando os módulos do WIF para o ASP.NET
Autenticação via Claims no ASP.NET WebForms
Uma nova forma de Autenticação/Autorização
Autenticação e Autorização no ASP.NET MVC
Explorando Segurança do ASP.NET - Roles
Explorando Segurança do ASP.NET - Membership e MembershipUser
Programação Assíncrona no ASP.NET MVC
Compactação de ViewState em ASP.NET
Criando e utilizando User Controls no Silverlight
Gerando JavaScript do lado do servidor com ASP.NET
Introdução às Dependency Properties
Efeitos de imagem com ASP.NET e LightBox 2
Marca d´agua em imagens usando System.Drawing
Asp.Net + Twitter sem API de terceiros
Produtos relacionados Topo
Pacote: Promoção C# Básico (válido somente para pagamento via boleto bancário)
CD/DVD: CD de Treinamento Criando Aplicações Asp.Net em Camadas (parte integrante do portal de vídeos .Net)
Pacote: Promoção: Portal de Vídeos .Net + CD Novidades das Linguagens (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq To SQL (válido somente para pagamento via boleto bancário)
Pacote: Promoção ASP.Net com Banco de Dados (válido somente para pagamento via boleto bancário)
Pacote: Promoção Linq + Asp.Net
CD/DVD: DVD de Treinamento E-Commerce com Visual Web Developer
CD/DVD: CD de Treinamento - Office SharePoint 2007 para Desenvolvedores WEB
CD/DVD: DVD de Treinamento - Crie uma aplicação ASP.NET com LINQ TO SQL
Livro: Desenvolvendo para web usando o Visual Studio 2008
CD/DVD: DVD de Treinamento Explorando o LINQ para SQL
Pacote: Pacote: Desenvolvedor Web Kit III (4 CDs)
Pacote: Pacote: Desenvolvedor Web Kit II (3 CDs)
Pacote: Pacote: Desenvolvedor Web Kit I (2 CDs)
CD/DVD: CD de Treinamento - RAD Studio 2007 e ASP.NET 2.0 (Delphi)
Pacote: Pacote ASP.NET - 4 CDs (Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008 + ASP.NET 2.0 Básico + Um mergulho no Controle GridView do ASP.NET 2.0 + Explorando as novidades)
CD/DVD: CD de Treinamento – Implementando AJAX em páginas ASP.NET 3.5 com o Visual Studio .NET 2008
CD/DVD: CD de Treinamento ASP.NET para Iniciantes - Visual Studio 2008
CD/DVD: CD de Treinamento sobre ASP.NET 2.0 Básico
CD/DVD: CD de treinamento: Um mergulho no Controle GridView do ASP.NET 2.0
E-Book: ASP.NET Ajax com C# e VB.NET (E-Book com entrega via download)
CD/DVD: CD de Treinamento sobre LINQ to SQL para iniciantes com Visual Studio .Net 2008
CD/DVD: CD de Treinamento Introdução a banco de dados com SQL Server 2005 Express
CD/DVD: CD de Treinamento Novidades das Linguagens C# 3.0 e VB 9 (Visual Basic 9)
CD/DVD: CD ASP.NET 2.0 - Atualização Rápida (Visual Studio .NET 2005)
CD/DVD: CD - Treinamento de ASP.NET 2.0 AJAX Extensions
CD/DVD: CD de Treinamento de ASP.NET 2.0 - Explorando as novidades
Livro: ASP.NET para desenvolvedores de web sites
Livro: ASP.NET Utilizando C# - De Programador para Programador
E-Book: E-Book: Tutorial de GridView no ASP.NET 2.0 (via download)
Livro: Use a Cabeça Análise & Projeto Orientado ao Objeto
© Copyright 2001-2010 Codeline Editora, Comércio e Tecnologia Ltda. | Política de privacidade e de uso | Anuncie | Fale conosco

» Site hospedado na Porta 80 Web Hosting «
Nossos números
Dicas: 1.314
Códigos/scripts: 279
Funções de VBScript : 90
Funções JScript : 05
Livros: 1.805
Notícias: 2.488
Artigos: 2.972
Cases: 14
Oportunidades: 4.546
Publicidade

Conheça a loja do Linha de Código.

Microsoft indica Linha de Código.

Assine a Revista Mundo .NET
Portal de Vídeos .NET - os melhores vídeos .NET estão aqui
O que você fará com o Visual Studio 2010?
Revista Codificando .Net

Siga-nos no Twitter

Linha de Código no Orkut
Fórum de discussão do portal Linha de Código
Feeds
Oportunidades
Notícias
Artigos
Artigos personalizado
       (Por assunto)
Artigos personalizado
       (Por autor)
Portal Vídeos .NET
Portal Vídeos Delphi
LC Blog
       (Onde você faz a notícia)
Promoções
Promoção Mobile com entrega via download (válido somente para pagamento via boleto bancário)
Promoção Mobile com entrega via download (válido somente para pagamento via boleto bancário)
De: R$ 189,00
Por: R$ 126,00
Promoção Wordpress + Tabless (válido somente para pagamento via boleto bancário)
De: R$ 149,70
Por: R$ 99,80
Promoção C# Básico (válido somente para pagamento via boleto bancário)
De: R$ 185,90
Por: R$ 136,00
Promoção PHP + MYSQL Intelimax (válido somente para pagamento via boleto bancário)
De: R$ 308,00
Por: R$ 219,00
Promoção Especial Infra
De: R$ 175,95
Por: R$ 136,00
CDs/DVDs
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
DVD Desenvolvimento de Games - Programando Jogos com o 3D Game Studio
Por: R$ 59,00
DVD Curso de CorelDraw X4
Por: R$ 79,90
DVD Curso de Fireworks CS4
Por: R$ 49,90
DVD Curso de Indesign CS4
Por: R$ 55,00
DVD Curso de Efeitos Digitais
Por: R$ 49,90
Livros
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
MSProject 2007 - Metodologia e Critérios de Qualidade para o Gerenciamento de Projetos
De: R$ 129,00
Por: R$ 77,40
Foundation FLASH CS3 para Designers
Ciência Moderna
De: R$ 139,00
Por: R$ 83,40
Recursos Visuais na Web com PHP
Ciência Moderna
De: R$ 49,00
Por: R$ 29,40
Crie um Sistema Web com PHP 5 e AJAX - Controle de Estoque
Erica
De: R$ 99,50
Por: R$ 84,50
Crie Projetos Gráficos com Adobe Photoshop CS4, CorelDRAW X4 e Adobe InDesign CS4 - em Português
Erica
De: R$ 77,50
Por: R$ 65,80
E-Books
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Manual Completo de Estudos MCSE 70-270 - Instalando, Configurando e Administrando o Windows XP (506 páginas) - Entrega via download
Por: R$ 30,00
Manual de Estudos - Exame 70-291 - Windows Server 2003 (606 páginas) - entrega via download
Por: R$ 30,00
Dominando MS – Visio ® em 20 Passos - Melhores Práticas em Gestão de Projetos (entrega via download)
Por: R$ 30,00
MS-Project® 2007 - Melhores Práticas de Gestão de Projetos - Dominando MS – Project ® em 20 Passos (e-book com entrega via download)
Por: R$ 20,00
Banco de dados com C# e Visual Studio .Net 2005 (entrega via download)
Por: R$ 20,00
Os 10+ | Autores do dia
Israel Aéce
Júlio Cesar Fabris Battisti
Anderson Patricio
Alfred Reinold Baudisch
Luiz Felipe de Freitas
Robert Martim
Ramon Durães
Alessandro de Oliveira Faria
José Carlos Macoratti
Eric C M Oliveira
Os 10+ | Artigos do dia
HTML Básico
HTML Avançado
Criando aplicativos para o Orkut
Tutorial de Tabelas Dinâmicas no Excel – Parte 1
Excel: fórmulas matriciais
ASP.NET 2.0 - Explorando o GridView
Iniciando um projeto de Nota Fiscal Eletrônica - NFe
PL/SQL - Procedures e Funções
Excel: Comparando Listas
PHP: Formulários e upload de múltiplos arquivos e fotos