Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/06/2011, 15:43
LOD_Fredy
 
Fecha de Ingreso: abril-2009
Mensajes: 341
Antigüedad: 15 años, 6 meses
Puntos: 3
Problemas para cerrar conexiones mysql en visual basic .net 2005

Hola a todos.

He estado a pregunte y pregunte cosas por un sistema que estoy desarrollando y hoy surgio un detalle grave a mi parecer que no tome en cuenta y que aunque hay forma de solucionar con un "parche", haria que cambie casi todo el codigo del sistema y el sistema esta casi terminado.

El problema que tengo es que no cierro las conexiones que hago al hacer alguna consulta, así sea de select, insert, etc. En si el problema lo veo con los selects al moverse de un renglon a otro en un datagridview que hace una consulta cada vez que se pasa de renglon.

Estoy usando el patron visitor y no encuentro como cerrar cada conexion que se va abriendo, despues de obtener la informacion de la base de datos pues si cierro la conexion en funcion Visit (del patron visitor) despues de asignar un datareader a mi objeto, ya no me permite usarlo.

Esto es un pedazo del codigo del visit y del boton donde se hace la visita:

metodo Visit
Código C++:
Ver original
  1. Public Overrides Sub Visit(ByVal objArticulos As Clase_Articulos)
  2.         Dim datosarticulo As String() = objArticulos.DatosArticulo
  3.  Try            
  4.             _oManejador.AbrirConexion()
  5. _oManejador.Conexion.Open()
  6.             Select Case objArticulos.Opc
  7.                Case 3
  8.                     _oManejador.Consulta = "SELECT AR.* FROM articulos AS AR, categorias AS CT, articulos_categorias AS AC WHERE CT.ct_nombre='" + datosarticulo(0) + "' AND AR.ar_id=AC.ar_id AND CT.ct_id=AC.ct_id and AR.ar_id>" + datosarticulo(1) + " LIMIT 2;"
  9.  
  10.  
  11. _oManejador.EjecutaConsulta()
  12.             objArticulos.Lector = _oManejador.Lector  
  13. end sub
Si debajo de la ultima linea cierro la conexion ya no me deja trabajar con el lector

Este es el codigo del evento que en teoria usarian muchos los usuarios y que por consiguiente me causa el problema de limite de conexiones superadas.

Código C++:
Ver original
  1. Private Sub DGArticulo_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DGArticulo.KeyUp
  2.         If e.KeyValue = 40 Then          
  3.             If DGArticulo.CurrentRow.Index = DGArticulo.Rows.Count - 1 Then
  4.                 Dim datosarticulo As String()
  5.                 _oArticulo = New Clase_Articulos
  6.                 If CBFiltroCategoria.SelectedIndex = 0 Or CBFiltroCategoria.SelectedIndex = -1 Then
  7.                     _oArticulo.Opc = 17
  8.                     ReDim datosarticulo(0)
  9.                     datosarticulo(0) = DGArticulo.Item(0, DGArticulo.CurrentRow.Index).Value
  10.                 Else
  11.                     _oArticulo.Opc = 3
  12.                     ReDim datosarticulo(1)
  13.                     datosarticulo(0) = CBFiltroCategoria.SelectedItem
  14.                     datosarticulo(1) = DGArticulo.Item(0, DGArticulo.CurrentRow.Index).Value
  15.                 End If
  16.  
  17.                 _oArticulo.DatosArticulo = datosarticulo
  18.                 Dim _oElem As Elemento
  19.                 _oElem = _oArticulo
  20.  
  21.                 Dim Consulta As Visitor = New VisitanteConsulta()
  22.                 _oElem.Accept(Consulta)
  23.                 Lector = _oArticulo.Lector
  24.  
  25.                 While Lector.Read()
  26.  
  27.                     DGArticulo.Rows.Add(Lector("ar_id").ToString(), Lector("ar_codigoarticulo").ToString(), Lector("ar_nombre").ToString(), Lector("ar_descripcion").ToString())
  28.  
  29.                 End While                                    
  30.             End If
  31.         End If
  32.     End Sub

Se que el codigo no es el mas optimizado ni mejor pensado, aun asi, espero me puedan ayudar y que los cambios que tenga que hacer no sean muchos por que enserio, el sistema es muy grande.