Usuário com melhor resposta
Uso correto de tratamentos de erros: blco try catch

Pergunta
-
preciso de umas dicas, pois gostaria de saber se seria preciso em um código como este abaixo o uso de mais do que um bloco de try catch ou não, as vezes usando 2 blocos, no erro pegava e exception errada..
Try
conexao.ConnectionString = str
comando.CommandText = "INSERT INTO telefones_uteis (nome, tel1, tel2, fax, email) VALUES (@Nome, @Tel1, @Tel2, @FAX, @Email)"
comando.Parameters.Clear()
comando.Parameters.Add(New MySqlParameter("@Nome", TextBox1.Text))
comando.Parameters.Add(New MySqlParameter("@Tel1", MaskedTextBox1.Text))
comando.Parameters.Add(New MySqlParameter("@Tel2", MaskedTextBox2.Text))
comando.Parameters.Add(New MySqlParameter("@FAX", MaskedTextBox3.Text))
comando.Parameters.Add(New MySqlParameter("@Email", TextBox2.Text))
comando.Connection = conexao
conexao.Open()
comando.ExecuteNonQuery()
conexao.Close()
Catch ex As MySqlException
MsgBox("Erro ao conectar com o banco de dados: " & ex.Message)
Finally
conexao.Dispose()
Encontrei a profissão
Respostas
-
Acho q vc confundiu. Nao tem necessidade de se colocar dois Try, e sim dois ou mais catchs, mas isso depende da necessidade.
try
catch ex as MySqlException
catch ex as Exception
end try
O primeiro catch so captura excecoes do tipo MysqlException, e a segunda captura qualquer excecao, se vc estava utilizando apenas a primeira, pode ocorrer sim de uma excecao ser lancada para cima, pois se nao for do tipo correto ela continuara. no site do macoratti mesmo, vc encontra material sobre isso.
http://www.macoratti.net/vbn5_ete.htm
Quem sabe um dia os DataSets se extinguirão?- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 26 de julho de 2010 15:14
Todas as Respostas
-
Esse código parece correcto e não precisa de mais um bloco para tratamento de erros.
Não entendo qual o problema.
Jorge Paulino
Visual Basic em Português
http://vbtuga.blogspot.com/
- Sugerido como Resposta Levi DomingosModerator sexta-feira, 23 de julho de 2010 22:52
-
é que o programa sendo usado por um usuário final, dependendo da situação, talvez poderia ter ai outros erros, e a exception.message traz a mensagem em inglês mostrando qual o erro, então talvez teria que fazer outros blocos de try no decorrer do código, testar os erros e ai tirar a exceptio.message, ex:
MsgBox("Erro ao conectar com o banco de dados: " & ex.Message)
MsgBox("Erro de leitura: " & ex.Message)
MsgBox("Erro de tal: " & ex.Message)
... e assim por diante, não sei se fui claro, obrigado desde já
Encontrei a profissão -
Thiago.....
Nao existe dois try Catch. O teu codigo esta bom. agora se queres fazer outro tipo de tratamento entao vais ter de eliminar o try e faz de outra forma.
if something faz algo
if alguma coisa faz alfo
Just Be Humble Malange! -
é que o programa sendo usado por um usuário final, dependendo da situação, talvez poderia ter ai outros erros, e a exception.message traz a mensagem em inglês mostrando qual o erro, então talvez teria que fazer outros blocos de try no decorrer do código, testar os erros e ai tirar a exceptio.message, ex:
MsgBox("Erro ao conectar com o banco de dados: " & ex.Message)
MsgBox("Erro de leitura: " & ex.Message)
MsgBox("Erro de tal: " & ex.Message)
... e assim por diante, não sei se fui claro, obrigado desde já
Encontrei a profissão
Just Be Humble Malange! -
mais uma vez obrigado pela atenção Malange, vi uma vez no site do macoratti http://www.macoratti.net/net_msql.htm, que ele usou em um código com instrução SQL com SELECT 2 try catch, se ao menos o exception.message fosse traduzido, ficaria melhor, e no meu entendimento ainda de leigo, não teria a nescessidade de 2 try catch
segue o exemplo do macoratti:
Dim conn As MySqlConnectionconn = New MySqlConnection
conn.ConnectionString = "server=localhost;user id=root;password=mac;database=northwind"
SQL = "SELECT * FROM northwind.employees"
Tryconn.Open()
Try
myCommand.Connection = conn
myCommand.CommandText = SQL
myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)
DataGrid1.DataSource = myData
Catch myerro As MySqlException
MsgBox("Erro de leitura no banco de dados : " & myerro.Message)
End Try
MessageBox.Show("Conexão aberta com sucesso")
conn.Close()
Catch myerro As MySqlException
MessageBox.Show("Erro ao conectar com o Banco de dados : " & myerro.Message)
Finally
conn.Dispose()
End Try
Encontrei a profissão -
Acho q vc confundiu. Nao tem necessidade de se colocar dois Try, e sim dois ou mais catchs, mas isso depende da necessidade.
try
catch ex as MySqlException
catch ex as Exception
end try
O primeiro catch so captura excecoes do tipo MysqlException, e a segunda captura qualquer excecao, se vc estava utilizando apenas a primeira, pode ocorrer sim de uma excecao ser lancada para cima, pois se nao for do tipo correto ela continuara. no site do macoratti mesmo, vc encontra material sobre isso.
http://www.macoratti.net/vbn5_ete.htm
Quem sabe um dia os DataSets se extinguirão?- Marcado como Resposta Fernanda SimõesModerator segunda-feira, 26 de julho de 2010 15:14
-
-
Amigo, quando você coloca catch e especifica o MySqlException, você está capturando os erros que derem apenas quando esse cara é utilizado, o melhor que você pode fazer é usar o Exception apenas, com ele você consegue capturar todos os erros, se você quiser algo mais específico, como no caso do MySqlException, então coloca os específicos em cima e no final coloca o Exception, mesmo se você esquecer de capturar algum erro, ele será jogado para o Exception e tratado, espero ter ajudado amigo.