Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/04/2009, 16:15
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Conexion en clase!

No hay que complicarse tanto.
La cosa andaría mas o menos por aquí:
Código VB.Net:
Ver original
  1. Imports MySql.Data.MySqlClient
  2. Imports MySql.Data.Types
  3. Imports MySql.Data.Common
  4.  
  5. Private conexion As MySqlConnection
  6. Private sentencias As MySqlCommand
  7.  
  8. 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
  9.         Dim strCx As String
  10.         If Not conexion Is Nothing Then
  11.             If conexion.State = 1 Then
  12.                 Return True
  13.             ElseIf conexion.State = ConnectionState.Closed Then
  14.                 conexion.Open()
  15.                 Return True
  16.             Else
  17.                 Return False
  18.             End If
  19.         Else
  20.             Try
  21.                 strCx = "Database=" & vBase & ";Data Source=" & vServer & ";User Id=" & vUser & ";Password=" & vPwd & ";Port=" & oPort.ToString & ";CharSet=utf8;Pooling=false;"
  22.                 conexion = New MySqlConnection(strCx)
  23.                 conexion.Open()
  24.                 Return True
  25.             Catch ex As MySqlException
  26.                 Select Case ex.Number
  27.                     Case 0
  28.                         MessageBox.Show("El servidor no responde." & ControlChars.CrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  29.                   Case 1045
  30.                         MessageBox.Show("El nombre de usuario o la clave son incorrectas." & ControlChars.CrLf & "Vuelva a ingresarlas", "Error de login", MessageBoxButtons.OK, MessageBoxIcon.Error)
  31.                   Case 1049
  32.                         MessageBox.Show("La base de datos no existe." , "Error de base de datos inexistente", MessageBoxButtons.OK, MessageBoxIcon.Error)
  33.                 End Select
  34.                 Return False
  35.             End Try
  36.             Return True
  37.         End If
  38.     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 original
  1. Imports MySql.Data.MySqlClient
  2. Imports MySql.Data.Types
  3. Imports MySql.Data.Common
  4.  
  5. Private conexion As MySqlConnection
  6. Private sentencias As MySqlCommand
  7.  
  8. Public Function conectar(ByVal oSesion as Sesion) As Boolean
  9.         Dim strCx As String
  10.         If Not conexion Is Nothing Then
  11.             If conexion.State = 1 Then
  12.                 Return True
  13.             ElseIf conexion.State = ConnectionState.Closed Then
  14.                 conexion.Open()
  15.                 Return True
  16.             Else
  17.                 Return False
  18.             End If
  19.         Else
  20.             Try
  21.                 With oSesion.usuario
  22.                     strCx = "Database=" & .Base & ";Data Source=" & .Server & ";User Id=" & .User & ";Password=" & .Pwd & ";Port=" & .Port.ToString & ";CharSet=utf8;Pooling=false;"
  23.                 End With
  24.                 conexion = New MySqlConnection(strCx)
  25.                 conexion.Open()
  26.                 Return True
  27.             Catch ex As MySqlException
  28.                 Select Case ex.Number
  29.                     Case 0
  30.                         MessageBox.Show("El servidor no responde." & ControlChars.CrLf & "Consulte con el Administrador de Sistemas", "Error de conexión principal", MessageBoxButtons.OK, MessageBoxIcon.Error)
  31.                   Case 1045
  32.                         MessageBox.Show("El nombre de usuario o la clave son incorrectas." & ControlChars.CrLf & "Vuelva a ingresarlas", "Error de login", MessageBoxButtons.OK, MessageBoxIcon.Error)
  33.                   Case 1049
  34.                         MessageBox.Show("La base de datos no existe." , "Error de base de datos inexistente", MessageBoxButtons.OK, MessageBoxIcon.Error)
  35.                 End Select
  36.                 Return False
  37.             End Try
  38.             Return True
  39.         End If
  40.     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
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 13/04/2009 a las 19:01