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 originalPublic Overrides Sub Visit(ByVal objArticulos As Clase_Articulos)
Dim datosarticulo As String() = objArticulos.DatosArticulo
Try
_oManejador.AbrirConexion()
_oManejador.Conexion.Open()
Select Case objArticulos.Opc
Case 3
_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;"
_oManejador.EjecutaConsulta()
objArticulos.Lector = _oManejador.Lector
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 originalPrivate Sub DGArticulo_KeyUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DGArticulo.KeyUp
If e.KeyValue = 40 Then
If DGArticulo.CurrentRow.Index = DGArticulo.Rows.Count - 1 Then
Dim datosarticulo As String()
_oArticulo = New Clase_Articulos
If CBFiltroCategoria.SelectedIndex = 0 Or CBFiltroCategoria.SelectedIndex = -1 Then
_oArticulo.Opc = 17
ReDim datosarticulo(0)
datosarticulo(0) = DGArticulo.Item(0, DGArticulo.CurrentRow.Index).Value
Else
_oArticulo.Opc = 3
ReDim datosarticulo(1)
datosarticulo(0) = CBFiltroCategoria.SelectedItem
datosarticulo(1) = DGArticulo.Item(0, DGArticulo.CurrentRow.Index).Value
End If
_oArticulo.DatosArticulo = datosarticulo
Dim _oElem As Elemento
_oElem = _oArticulo
Dim Consulta As Visitor = New VisitanteConsulta()
_oElem.Accept(Consulta)
Lector = _oArticulo.Lector
While Lector.Read()
DGArticulo.Rows.Add(Lector("ar_id").ToString(), Lector("ar_codigoarticulo").ToString(), Lector("ar_nombre").ToString(), Lector("ar_descripcion").ToString())
End While
End If
End If
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.