TransWikia.com

Control de errores en bucle infinito vb.net

Stack Overflow en español Asked by Bernardo Harreguy on December 18, 2021

?! tengo el problema de error en VB.NET, He intentado todo pero no sé cómo solucionarlo. Básicamente al intentar conectarme a la base de datos busco controlas los errores de conexión y al dar error de desconexión ejecuto un formulario donde da opciones a seguir para continuar la sentencia de MySQL,
a continuación el código:
Esto es el código que llama a todas las demás funciones siguientes, este sería el primer TRY:

Public Function consultaadatos(ByVal sql As String) As DataTable
        Dim datos As New DataTable
        Using conexion As New MySqlConnection(conexionstring)
reintentar:
            Try
                conexion.Open()
            Catch ex As Exception
                configurarsistema(ex.Message, ex.HelpLink, ex.StackTrace)                   
                GoTo reintentar
            End Try
            Try
                Using adaptador1 As New MySqlDataAdapter
                    adaptador1.SelectCommand = New MySqlCommand(sql, conexion)
                    For Each parametross As KeyValuePair(Of Object, parametro) In parametros
                        adaptador1.SelectCommand.Parameters.AddWithValue(parametross.Value.nombre, parametross.Key)
                    Next
                    If logbasededatos Then log(adaptador1.SelectCommand.CommandText,, "query")
                    adaptador1.Fill(datos)
                End Using
            Catch ex As Exception When logbasededatos
                If logbasededatos Then log("error en consulta de datos ...",, "query")
                mostrarerrordetransaccion(ex)
            End Try
        End Using
        parametros.Clear()
        Return datos
    End Function

En limpio la conexion la llamo de la siguiente manera:

Using conexion As New MySqlConnection(conexionstring)
reintentar:
            Try
                conexion.Open()
            Catch ex As Exception
                configurarsistema(ex.Message, ex.HelpLink, ex.StackTrace)               
                GoTo reintentar
            End Try

Si la conexión no es posible se ejecuta la función "configurarsistema", del cual el codigo es el siguiente:

 Public Sub configurarsistema(Optional mensaje As String = "", Optional vinculo As String = "", Optional trace As String = "")
        Dim form As New desconexion
        form.mensaje.Text = mensaje
        If vinculo IsNot Nothing Then form.ayuda.Text = vinculo
        form.errortecnico.Text = trace

        If System.Windows.Forms.Application.OpenForms.Count > 0 Then
            form.ShowDialog(System.Windows.Forms.Application.OpenForms.Item(0))
        Else
            form.ShowDialog()
        End If
    End Sub

Este llama un formulario que da la opción de reintentar, reiniciar la aplicación, o bien configurar la base de datos de nuevo. El bucle sucede cuando se presiona en el botón de probar conexión, al haber cambiado la configuración
El formulario es este...

El código del botón probar es el siguiente:

 Sub ProbarClick(sender As Object, e As EventArgs) Handles probar.Click           
        Using comunicacion As New mysqlcustom
            If verificarconexion(server.Text & ";Port=" & puerto.Text, usua.Text, contra.Text, base.Text, True) Then
                estado.Text = "Conexión existosa!"
            Else
                estado.Text = "Imposible conectar!"
            End If
        End Using
    End Sub

La función "Verificarconexion" es la siguiente:

Public Function verificarconexion(Optional servidor1 As String = "", Optional usuario1 As String = "", Optional contrasena1 As String = "", Optional base As String = "", Optional mostrarerror As Boolean = False) As Boolean            
        Try                
            Using conexion As New MySqlConnection("Server=" & servidor1 & "; Uid=" & usuario1 & "; Pwd=" & contrasena1 & ";Connection Timeout=6000;Allow User Variables=True")
                conexion.Open()
                If base <> "" Then
                    Using query2 As New MySqlCommand("CREATE DATABASE IF NOT EXISTS `" & base & "`;USE `" & base & "`;", conexion)
                        query2.ExecuteNonQuery()
                    End Using
                End If
                conexion.Close()
                Return True
            End Using
        Catch ex As Exception
            If mostrarerror Then MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Error al intentar conectar")               
            Return False
        End Try
    End Function

Al rellenar los datos y presionar el botón probar, el formulario se vuelve a abrir, dando lugar rellenar la configuración de nuevo y volver a presionar probar se llama a la funcion "configurarsistema".

Donde puede llegar a estar el error? alguien ve una solución?

One Answer

Ni me voy a centrar en el resto de tu codigo... solo voy a ver la logica de esto:

Using conexion As New MySqlConnection(conexionstring)
    reintentar:
    Try
        conexion.Open()
    Catch ex As Exception
        configurarsistema(ex.Message, ex.HelpLink, ex.StackTrace)               
        GoTo reintentar
    End Try

Usando una conexion...
pruebo abrirla.. no abre.. me voy a configurar sistema...
Hago un goto.. (OMG!!!!)
vuelvo a probar abrir la conexion.. con los parametros viejos!!! nunca la reparametrice....

Esto, se veria mucho mejor asi...

dim conecto as bool = false;
while (!conecto)
    Using conexion As New MySqlConnection(conexionstring)
    Try
      conexion.Open()
      conecto = true
    Catch ex As Exception
        configurarsistema(ex.Message, ex.HelpLink, ex.StackTrace)               
    End Try

Answered by gbianchi on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP