No hay que complicarse tanto.
La cosa andaría mas o menos por aquí:
Código VB.Net:
Ver originalImports MySql.Data.MySqlClient
Imports MySql.Data.Types
Imports MySql.Data.Common
Private conexion As MySqlConnection
Private sentencias As MySqlCommand
Public Function conectar(ByVal vServer As String, ByVal vBase As String, ByVal vUser As String, ByVal vPwd As String, ByVal oPort As Int16) As Boolean
Dim strCx As String
If Not conexion Is Nothing Then
If conexion.State = 1 Then
Return True
ElseIf conexion.State = ConnectionState.Closed Then
conexion.Open()
Return True
Else
Return False
End If
Else
Try
strCx = "Database=" & vBase & ";Data Source=" & vServer & ";User Id=" & vUser & ";Password=" & vPwd & ";Port=" & oPort.ToString & ";CharSet=utf8;Pooling=false;"
conexion = New MySqlConnection(strCx)
conexion.Open()
Return True
Catch ex As MySqlException
Select Case ex.Number
Case 0
MessageBox.Show("El servidor no responde." & ControlChars.CrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1045
MessageBox.Show("El nombre de usuario o la clave son incorrectas." & ControlChars.CrLf & "Vuelva a ingresarlas", "Error de login", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1049
MessageBox.Show("La base de datos no existe." , "Error de base de datos inexistente", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Select
Return False
End Try
Return True
End If
End Function
Este método está sintetizado de uno que actualmente tenemos en uso, por lo que debería ser funcional. Está programado en VB.Net 2003 y solamente requiere el paso de los parámetros adecuados.
Es mejor manejar todos esos parámetros para darle flexibilidad a la configuración de la conexión.
Para hacerlo aún más simple, puedes manejarlo a través de un objeto Sesión que incluya una Instancia de una Clase Usuario, donde estén los parámetros como atributos, esto funcionaría:
Código VB.Net:
Ver originalImports MySql.Data.MySqlClient
Imports MySql.Data.Types
Imports MySql.Data.Common
Private conexion As MySqlConnection
Private sentencias As MySqlCommand
Public Function conectar(ByVal oSesion as Sesion) As Boolean
Dim strCx As String
If Not conexion Is Nothing Then
If conexion.State = 1 Then
Return True
ElseIf conexion.State = ConnectionState.Closed Then
conexion.Open()
Return True
Else
Return False
End If
Else
Try
With oSesion.usuario
strCx = "Database=" & .Base & ";Data Source=" & .Server & ";User Id=" & .User & ";Password=" & .Pwd & ";Port=" & .Port.ToString & ";CharSet=utf8;Pooling=false;"
End With
conexion = New MySqlConnection(strCx)
conexion.Open()
Return True
Catch ex As MySqlException
Select Case ex.Number
Case 0
MessageBox.Show("El servidor no responde." & ControlChars.CrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1045
MessageBox.Show("El nombre de usuario o la clave son incorrectas." & ControlChars.CrLf & "Vuelva a ingresarlas", "Error de login", MessageBoxButtons.OK, MessageBoxIcon.Error)
Case 1049
MessageBox.Show("La base de datos no existe." , "Error de base de datos inexistente", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Select
Return False
End Try
Return True
End If
End Function
De esa forma, la sintaxis se vuelve un poco más simple y solamente tienes que invocar:
objetoBaseDatos.Conectar(objetoSesion) antes de usar la conexión pasa enviar consultas. AL encapsular los valores dentro de la isntancia de la clase, aumentas la seguridad del sistema.
Nota: Existe una forma de verificar que no esté logueado ya en la base.... cosa de no crearle dos conexiones al mismo tiempo. Es bastante simple.
Tip:
Para controlar situaciones dentro de las bases de datos, es mejor manejarse con los número de excepciones (todos los DBMS los tienen). En el caso de MySQL la lista está en :
Capítulo 26. Manejo de errores en MySQL
Son los mismos que se usan en los STORE PROCEDURES, cuando se indican HANDLERs