Que tal salu2 y feliz dia!
Veran, tengo una conexion a mysql que es la siguiente:
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:
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.
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:
GC.KeepAlive(CellDBCon);
Un saludo.
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.
Ok gracias a los dos. Voy a probar la forma que me sugieres seba.
Enseguida posteo los resultados.
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.