elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL  (Leído 4,232 veces)
luison

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« en: 9 Febrero 2013, 05:08 am »

Hola  a todos

Tengo una aplicación en vb.net + mysql. Donde para gestionar la interacción con mysql tengo una clase llamada clsDatabase. Cuando realizo consultas consecutivas mi aplicación se traba, como si se quedara congelada esperando algo, lo raro que no manda ningun mensaje de error, aunque le ponga la consulta dentro de un try.. catch.


Esta es mi clase para gestionar la base de datos:
Código
  1. Imports Microsoft.VisualBasic
  2. Imports System.Data
  3. Imports MySql.Data.MySqlClient
  4. Imports System.Configuration
  5.  
  6. Public Class clsDatabase
  7.    Private objConn As MySqlConnection
  8.    Private objCmd As MySqlCommand
  9.    Private Trans As MySqlTransaction
  10.    Private strConnString As String
  11.  
  12.    Public Sub New()
  13.        strConnString = "server=" & iServer & "; uid=" & iUser & "; pwd=" & iPassword & "; port=" & iPuerto & "; database=" & iBaseDatos & ";connection timeout=3600;"
  14.    End Sub
  15.  
  16.    Public Function QueryDataReader(ByVal strSQL As String) As MySqlDataReader
  17.        Dim dtReader As MySqlDataReader
  18.        objConn = New MySqlConnection
  19.        With objConn
  20.            .ConnectionString = strConnString
  21.            .Open()
  22.        End With
  23.        objCmd = New MySqlCommand(strSQL, objConn)
  24.        dtReader = objCmd.ExecuteReader()
  25.        Return dtReader '*** Return DataReader ***'
  26.    End Function
  27.  
  28.    Public Function QueryDataSet(ByVal strSQL As String) As DataSet
  29.        Dim ds As New DataSet
  30.        Dim dtAdapter As New MySqlDataAdapter
  31.        objConn = New MySqlConnection
  32.        With objConn
  33.            .ConnectionString = strConnString
  34.            .Open()
  35.        End With
  36.        objCmd = New MySqlCommand
  37.        With objCmd
  38.            .Connection = objConn
  39.            .CommandText = strSQL
  40.            .CommandType = CommandType.Text
  41.        End With
  42.        dtAdapter.SelectCommand = objCmd
  43.        dtAdapter.Fill(ds)
  44.        Return ds   '*** Return DataSet ***'
  45.    End Function
  46.  
  47.    Public Function QueryDataTable(ByVal strSQL As String) As DataTable
  48.        Dim dtAdapter As MySqlDataAdapter
  49.        Dim dt As New DataTable
  50.        objConn = New MySqlConnection
  51.        With objConn
  52.            .ConnectionString = strConnString
  53.            .Open()
  54.        End With
  55.        dtAdapter = New MySqlDataAdapter(strSQL, objConn)
  56.        dtAdapter.Fill(dt)
  57.        Return dt '*** Return DataTable ***'
  58.    End Function
  59.  
  60.    Public Function QueryExecuteNonQuery(ByVal strSQL As String) As Boolean
  61.        'MsgBox(strSQL)
  62.        objConn = New MySqlConnection
  63.        With objConn
  64.            .ConnectionString = strConnString
  65.            .Open()
  66.        End With
  67.        Try
  68.            objCmd = New MySqlCommand()
  69.            With objCmd
  70.                .Connection = objConn
  71.                .CommandType = CommandType.Text
  72.                .CommandText = strSQL
  73.            End With
  74.            objCmd.ExecuteNonQuery()
  75.            Return True '*** Return True ***'
  76.        Catch ex As Exception
  77.            MsgBox("ERROR EN QueryExecuteNonQuery" & Err.Description, MsgBoxStyle.Exclamation)
  78.            Return False '*** Return False ***'
  79.        End Try
  80.    End Function
  81.  
  82.    Public Function QueryExecuteScalar(ByVal strSQL As String) As Object
  83.        Dim obj As Object
  84.        objConn = New MySqlConnection
  85.        With objConn
  86.            .ConnectionString = strConnString
  87.            .Open()
  88.        End With
  89.        Try
  90.            objCmd = New MySqlCommand()
  91.            With objCmd
  92.                .Connection = objConn
  93.                .CommandType = CommandType.Text
  94.                .CommandText = strSQL
  95.            End With
  96.            obj = objCmd.ExecuteScalar()  '*** Return Scalar ***'
  97.            Return obj
  98.        Catch ex As Exception
  99.            MsgBox("ERROR:" & Err.Description)
  100.            Return Nothing '*** Return Nothing ***'
  101.        End Try
  102.    End Function
  103.  
  104.    Public Function TransStart()
  105.        objConn = New MySqlConnection
  106.        With objConn
  107.            .ConnectionString = strConnString
  108.            .Open()
  109.        End With
  110.        Trans = objConn.BeginTransaction(IsolationLevel.ReadCommitted)
  111.    End Function
  112.  
  113.    Public Function TransExecute(ByVal strSQL As String) As Boolean
  114.        objCmd = New MySqlCommand()
  115.        With objCmd
  116.            .Connection = objConn
  117.            .Transaction = Trans
  118.            .CommandType = CommandType.Text
  119.            .CommandText = strSQL
  120.        End With
  121.        objCmd.ExecuteNonQuery()
  122.    End Function
  123.  
  124.    Public Function TransRollBack()
  125.        Trans.Rollback()
  126.    End Function
  127.  
  128.    Public Function TransCommit()
  129.        Trans.Commit()
  130.    End Function
  131.  
  132.    Public Sub Close()
  133.        Try
  134.            objConn.Close()
  135.            objConn = Nothing
  136.        Catch ex As Exception
  137.  
  138.        End Try
  139.  
  140.    End Sub
  141.  
  142. End Class
  143.  
  144.  



Realizo consultas normales, para cortes de caja, reportes, ventas etc.  Durante horas puede trabajar bien, pero despues de un tiempo la aplicacion se traba y no da mas.

Cuando inicio la aplicacion declaro una instancia de  la clase :
Código
  1. Public con as new clsDatabase
Y utilizo esa instancia en todos los formularios, no creo que se trabe porque se llega al full de pools, o conexiones a mysql, puesto que mantengo solo una conexión desde el inicio.
A menos que la clase esté haciendo un mal manejo de las conexiones con mysql?

Les agradezco de antemano cualquier tip, aportación o sugerencia para solucionar el problema.

Gracias  :)

[/size]



En línea

_katze_

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #1 en: 9 Febrero 2013, 05:18 am »

mira la conexion con la db la haces cuando inicializas la clase si instancias la clase mas de una vez puede estar el problema ahi


En línea

luison

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #2 en: 9 Febrero 2013, 05:30 am »

Podría ser que se generen muchas conexiones y ese sea el problema, lo que no entiendo por qué no se genera el error en mi aplicacion.

Un ejemplo del uso de la instancia de la clase es:
Código
  1. con.QueryDataReader("update departamentos set nombre='" & txtNomDepto.Text & "' where nombre='" & lblNomDepto.Text & "'")
  2.  

Otro ejemplo es:
Código
  1. lector = con.QueryDataReader("select * from departamentos")
  2.        lstDeptos.Items.Clear()
  3.  
  4.        While lector.Read
  5.            item = lstDeptos.Items.Add(lector(0))
  6.            item.SubItems.Add(lector(1))
  7.        End While
  8.        lector.Close()
  9.  

Espero sirva para que me compartan sus ideas.

Gracias
En línea

_katze_

Desconectado Desconectado

Mensajes: 140



Ver Perfil WWW
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #3 en: 9 Febrero 2013, 06:05 am »

usa las exepciones de sqldataexepcion o algo asi, eso te cantan la posta y borra el return nothing
En línea

HdM


Desconectado Desconectado

Mensajes: 1.674



Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #4 en: 9 Febrero 2013, 21:04 pm »

Hola.

Citar
no creo que se trabe porque se llega al full de pools, o conexiones a mysql, puesto que mantengo solo una conexión desde el inicio.

Yo creo que no sólo mantienes una cnx desde el inicio. Tienes 5 funciones en la clase que cada vez que son llamadas, abren una nueva cnx. Si por el uso que se le da a la app (y si tienes varios puestos ejecutándola) no se para de llamar estas funciones y no se van cerrando las cnx...

También puedes echar un vistazo a cómo tienes configurado el servidor y sus logs.

Un saludo.
En línea

- Nice to see you again -
luison

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #5 en: 10 Febrero 2013, 01:49 am »

Tengo instalado xampp 1.7.3, configurado normal, con limite maximo de conexiones el que trae por default 151. Lo que estoy haciendo es en un modulo declarar:

Public Con as new clsDatabase

y utilizo esa instancia en toda la aplicacion. Lo que podria ser es que la funcion QueryDataReader abre una conexion a mysql en distintos formularios y ésta no se cierre hasta que la aplicacion se cierra al final del dia.
Solo es una pc donde esta corriendo mi sistema.
Ya agregue  los
Código
  1. Catch ex As MySql.Data.MySqlClient.MySqlException
pero no me devuelve error  >:(

Sigo buscando soluciones, gracias...
En línea

luison

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #6 en: 10 Febrero 2013, 02:03 am »

Probablemente esto ayude. Realizando una venta se registra en diferentes tablas la transaccion:
1-En tabla de ventas
2-En detalle de ventas
3-En movimientos
4-Se actualizan inventarios

Todo ello genera en mysql dentro de procesos del servidor una imagen como la que comparto:

Es normal que se abran todos esos procesos  y se mantengan ahi?
O sera que el problema es porque se abren demadiados y jamas se cierran sino es que hasta varias horas despues cuando el sistema cierra las ventas del dia?

Gracias..
En línea

luison

Desconectado Desconectado

Mensajes: 95


Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #7 en: 10 Febrero 2013, 03:33 am »

Investigando veo que mysql tiene configurado el wait_timeout por default en 8 horas de espera, por tanto cada conexion  que abro permanece abierta toda la jornada de trabajo, lo que a la postre ocasiones una pila enorme de conexiones abiertas.
Quisiera pensar que eso es la causa de que mi aplicacion se traba. Cambie el wait_timeout a 30 segundos para que cada que pase ese tiempo mysql cierre todas las conexiones en estado sleep.

Que opinan ustedes?,,, Será la solucion?

Esperemos que sí  ;D
En línea

alister


Desconectado Desconectado

Mensajes: 513


Ver Perfil
Re: Mi Aplicacion se traba haciendo consultas conxecutivas a MySQL
« Respuesta #8 en: 10 Febrero 2013, 05:02 am »

Investigando veo que mysql tiene configurado el wait_timeout por default en 8 horas de espera, por tanto cada conexion  que abro permanece abierta toda la jornada de trabajo, lo que a la postre ocasiones una pila enorme de conexiones abiertas.
Quisiera pensar que eso es la causa de que mi aplicacion se traba. Cambie el wait_timeout a 30 segundos para que cada que pase ese tiempo mysql cierre todas las conexiones en estado sleep.

Que opinan ustedes?,,, Será la solucion?

Esperemos que sí  ;D


pero tienes que cerrarlas tu, o reciclar las conexiones que tengas abiertas.

solo veo que New New New New New New ! ejejejeje
En línea

Back 2 business!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Limite de consultas en MySQL desde PHP !!???
PHP
Diabliyo 9 3,957 Último mensaje 18 Diciembre 2006, 23:02 pm
por Diabliyo
Script Perl para consultas Mysql
Scripting
^Tifa^ 0 1,953 Último mensaje 9 Noviembre 2007, 18:18 pm
por ^Tifa^
Consultas php a mysql
PHP
teudiss 1 1,689 Último mensaje 16 Marzo 2010, 14:03 pm
por Castg!
mysql consultas encriptadas o no?
Bases de Datos
bomba1990 2 2,126 Último mensaje 8 Julio 2010, 05:26 am
por bomba1990
¿Mostrar consultas de MySQL en textbox en VB.NET?
.NET (C#, VB.NET, ASP)
Argentino Canejo 8 19,110 Último mensaje 19 Octubre 2012, 03:24 am
por Argentino Canejo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines