Foros del Web » Programación para mayores de 30 ;) » .NET »

Conexion en clase!

Estas en el tema de Conexion en clase! en el foro de .NET en Foros del Web. Holas,,, necesito colocar toda mi cadena de conexion en una clase,, lo que pasa es que a cada rato que ago una conexion a la ...
  #1 (permalink)  
Antiguo 13/04/2009, 15:20
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Conexion en clase!

Holas,,, necesito colocar toda mi cadena de conexion en una clase,, lo que pasa es que a cada rato que ago una conexion a la BD ago una nueva conexion y reescribo ese codigo en muchas ocasiones,, y kisiera colocarlo solo una ves en una clase para despues mandarlo a llamar...


Dim conexion As New MySqlConnection
conexion.ConnectionString = "server=localhost; user id=root; password=123456; database=datos"
Dim consul As String
consulta = "consulta"
Dim ocomando As New MySqlCommand(consulta, conexion)
conexion.Open()
ocomando.ExecuteNonQuery()
conexion.Close()
conexion.Dispose()

el codigo anterior es un ejemplo de lo que ago, realmente seria muy muy util meter esa cadena de conexion en una clase, y asi solo mandar a llamarlo,,,

Desde ya Gracias,, Saludos
  #2 (permalink)  
Antiguo 13/04/2009, 15:36
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Conexion en clase!

Puedes crear un Proc

Código vb.net:
Ver original
  1. public Con as MySqlConnection
  2. public Com as MySqlCommand
  3. public Adp as MysqlDataAdapter
  4. public Datos as Dataset
  5.  
  6. ' Procedimiento Para Conectarme a la Bd de MySQL
  7. public Shared sub ConexionMySQL()
  8. try
  9. Con = new MysqlConnection
  10. Con .ConnectionString = "server=localhost; user id=root; password=123456; database=datos"
  11. if Con.state = 1 then Con.Close
  12. Con.Open
  13. catch ex as Exception
  14. msgbox(ex.message,48)
  15. end try
  16. end sub
  17. ' Procedimiento para Ejecutar una Consulta sin devolver ningun valor
  18. public Shared sub Ejecutar(Byval CadMySql as String)
  19. try
  20. Com = new MySqlCommand(CadMySql,Con)
  21. Com.ExecuteNonQuery()
  22. catch ex as Exception
  23. msgbox(ex.message,48)
  24. finally
  25. Com.Dispose()
  26. end try
  27. end sub
  28.  
  29. ' Procedimiento para Ejecutar una Consulta devolviendo Datos
  30. public Shared function Mostrar(Byval CadMySql as String) as DataTable
  31. try
  32. Adp = new MySqlDataAdapter(CadMySql, Con)
  33. Datos = new DataSet
  34. Adp.fill(Datos,"x")
  35. catch ex as Exception
  36. msgbox(ex.message,48)
  37. finally
  38. Adp.Dispose()
  39. end try
  40. return Datos.Tables("x")
  41. end function

Esto lo Agregas a una Clase o a un Modulo

Si Es una Clase lo debes llamar de la siguiente manera
NomClase.NomProc()

Si es Un Modulo
NomProc()
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 13/04/2009, 16:15
Avatar de 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
  #4 (permalink)  
Antiguo 14/04/2009, 18:08
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Conexion en clase!

Acabo de leer ambos comentarios,,, y sinceramente ambos se me acen muy interesantes, hoy los pruebo y les comento que sucede,, desde ya muchas gracias por las prontas respuestas!!!!!!
  #5 (permalink)  
Antiguo 14/04/2009, 19:32
 
Fecha de Ingreso: marzo-2008
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Conexion en clase!

Dradi7,, un favor mas,,,,,,,,,, mira que implemente tu codigo,,,,

decidi trabajarlo con un modulo!

Código:
 
        Dim consulta As String
        consulta = "update datos set nombre='" & "JESUS MANUEL" & "'"
        conectar.Ejecutar(consulta)
pero me manda el sig error:
Connection must be valid an open


Podrias ayudarme,,,
  #6 (permalink)  
Antiguo 14/04/2009, 22:43
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Conexion en clase!

Bueno como te explique el Codigo te envia error porq no te has Conectado a la Base de Datos

Código:
Dim consulta as String
try
      conectar.ConexionMySQL()
      consulta = "update datos set nombre='" & "JESUS MANUEL" & "'"
      conectar.Ejecutar(consulta)
catch ex as Exception
      msgbox(ex.message,48)
finally
      conectar.Con.Close()
end try
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #7 (permalink)  
Antiguo 15/04/2009, 05:52
Avatar de 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!

Cita:
Iniciado por mcofy Ver Mensaje
Dradi7,, un favor mas,,,,,,,,,, mira que implemente tu codigo,,,,

decidi trabajarlo con un modulo!

Código:
 
        Dim consulta As String
        consulta = "update datos set nombre='" & "JESUS MANUEL" & "'"
        conectar.Ejecutar(consulta)
pero me manda el sig error:
Connection must be valid an open


Podrias ayudarme,,,
Una forma simple es que el método .Ejecutar tenga en su cuerpo una llamada al método .Conectar()
De esa forma funciona lo que postee, que crea la conexión si no existe, o la abre si está cerrada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:35.