Cómo mantener conexion abierta a MySQL?

Iniciado por luison, 14 Febrero 2011, 18:09 PM

0 Miembros y 1 Visitante están viendo este tema.

luison

Que tal salu2 y feliz dia!

Veran, tengo una conexion a mysql que es la siguiente:

Código (vbnet) [Seleccionar]

Public Sub ConexionMySQL()
        Try

            If CellDBCon.State = ConnectionState.Closed Then

                CellDBCon.ConnectionString = "Server=" & Trim(pStrServer) & "; port=" & Trim(pStrPort) & "; Uid=" & Trim(pStrUser) & "; Pwd=" & Trim(pStrPW) & "; database=" & Trim(pStrDB) & ";"
                CellDBCon.Open()

            End If
        Catch ex As Exception

        End Try

        MsgBox("Error al establecer la conmexion con el Servidor de Base de Datos" & vbCrLf & Err.Description)
    End Sub


La cual utiizo de la siguiente manera, como ejemplo:

Código (vbnet) [Seleccionar]

Dim item As ListViewItem
        Dim cmd As New MySqlCommand
        Dim reader As MySqlDataReader

        CerrarConexion()
        ConexionMySQL()
        Try
            cmd.Connection = CellDBCon
            cmd.CommandText = "SELECT * from horarios"
            reader = cmd.ExecuteReader
            lstLista.Items.Clear()
            While reader.Read

                item = lstLista.Items.Add(reader(0).ToString)
                item.SubItems.Add(reader(1).ToString)
               

            End While
        Catch ex As MySqlException
            MsgBox("Error: " & ex.Message & vbNewLine, MsgBoxStyle.Exclamation)
        End Try
        CerrarConexion()



Cada vez que lleno un combo, listview etx, tengo que abrir y cerrar la conexion.
De otra manera e intentado abrir la conexion en el load de los formularios para mantenerla siempre abierta, pero en ocasiones da un error de que ya hay una instancia de la conexion abierta.

Alguien que me pueda echar un cable de cómo puedo mantener la conexion siempre abierta sin tener que estar abriendo y cerrandola?

La idea es abrirla en los loads de los forms, o en unaa funcion main y cerrarla unicamente al cerrar la aplicacion.( cosa que hacia en el vb6  :) )

Gracias y estarémos por aqui investigando alternativas.


[D4N93R]

Pues deja como lo hacías pero solo comprueba que si se cierra la abres de nuevo y ya.

Aunque es mejor cerrarla siempre porque evita cargas innecesarias contra el servidor de base de datos.

Además se te cierra probablemente porque el Garbage Collector lo está haciendo.

Intenta poner eso en donde haces la conexión:
Código (csharp) [Seleccionar]

GC.KeepAlive(CellDBCon);


Un saludo.

seba123neo

Hola, yo nunca tuve problema en esto de las conexiones, siempre la mantuve abierta, pero nunca la habras en los formularios, lo podes abrir una sola vez en un modulo con el Sub_Main(), tenes que agregar un modulo simple y ahi crear el Sub_Main() y ahi conectarte, en las propiedad es del proyecto debes cambiar que el objeto de inicio sea el Sub_Main() y no el formulario.

otra cosa es que en esto de los temas de bases de datos, es mejor crear clases con metodos que traigan los resultados, asi en el formulario no haces las consultas, esto seria como programar en 3 capas digamos, pero bueno eso depende de cada uno.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

luison

Ok gracias a los dos. Voy a probar la forma que me sugieres seba.
Enseguida posteo los resultados.

[D4N93R]

Si, como dice seba está bien, pero recuerda validad que si la conexión se cierra volverla a abrir, solo para evitar problemas.

Esto lo puedes hacer en una propiedad static (shared en vb.net) en el Sub_main como dice seba.

Un saludo.