none
Uso correto de tratamentos de erros: blco try catch RRS feed

  • 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
    sexta-feira, 23 de julho de 2010 22:12

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?
    segunda-feira, 26 de julho de 2010 09:27

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/

    sexta-feira, 23 de julho de 2010 22:42
  • é 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
    sexta-feira, 23 de julho de 2010 22:53
  • 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!
    sexta-feira, 23 de julho de 2010 23:00
    Moderador
  • é 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
    http://msdn.microsoft.com/en-us/library/0yd65esw(VS.71).aspx

    Just Be Humble Malange!
    sexta-feira, 23 de julho de 2010 23:01
    Moderador
  • 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 MySqlConnection

    conn = New MySqlConnection

    conn.ConnectionString = "server=localhost;user id=root;password=mac;database=northwind"


    SQL = "SELECT * FROM northwind.employees"


    Try

       conn.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
    sábado, 24 de julho de 2010 07:57
  • 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?
    segunda-feira, 26 de julho de 2010 09:27
  • obrigado pelas respostas, mas esse exemplo que coloquei ai com 2 try como podem notar foi tirado do site do macoratti

    Encontrei a profissão
    segunda-feira, 26 de julho de 2010 21:18
  • 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.
    terça-feira, 29 de julho de 2014 12:21