Aula 48 - Tratamento de Exceções de Banco de Dados e Fechamento Seguro
Operações de banco de dados são inerentemente instáveis, pois dependem de fatores externos à aplicação, como disponibilidade da rede, saúde do servidor de SGBD, permissões de usuário e integridade das restrições SQL. Portanto, toda interação com o SGBD deve ser obrigatoriamente protegida por um Tratamento Estruturado de Exceções, evitando que falhas de banco causem o encerramento abrupto da aplicação desktop.
Tanto em C# quanto em Java, existem classes de exceções especializadas para capturar erros de banco de dados: SqlException no .NET e SQLException no Java. Essas classes fornecem métodos detalhados para diagnosticar o erro:
- Message: Exibe a descrição do erro retornada pelo SGBD.
- Number / ErrorCode: Retorna o código numérico específico do erro no SGBD (ex: erro de chave duplicada, violação de chave estrangeira, estouro de tamanho de campo).
Além de capturar o erro para informar o usuário de forma amigável, a camada de acesso a dados exige o Fechamento Seguro de Recursos. Se uma exceção ocorrer no meio da execução de um comando SQL, as linhas de código abaixo da falha serão ignoradas. Se a chamada ao método Close() estiver posicionada após o ponto de falha, a conexão permanecerá aberta no SGBD.
Para resolver esse problema crítico de infraestrutura, utilizamos duas abordagens padronizadas:
Uso do Bloco finally: O bloco finally garante a execução do código de fechamento, ocorra um erro ou não.
SqlConnection conexao = new SqlConnection(stringConexao);
try {
conexao.Open();
// Executa operações de dados
} catch (SqlException ex) {
MessageBox.Show("Erro de banco de dados: " + ex.Message);
} finally {
if (conexao.State == ConnectionState.Open) {
conexao.Close(); // Fechamento garantido
}
}
Instrução using (C#) / Try-With-Resources (Java): Recursos que implementam a interface de descarte (como IDisposable em C# ou AutoCloseable em Java) são automaticamente fechados e descartados ao término do bloco, mesmo em caso de exceções:
using (SqlConnection conexao = new SqlConnection(stringConexao)) {
conexao.Open();
// Operações de dados
} // A conexão é fechada e descartada automaticamente AQUI
O fechamento seguro previne o travamento da aplicação por esgotamento de conexões, garantindo a estabilidade necessária para operar os módulos comerciais da disciplina.

Comentários
Postar um comentário