Cita: Te refieres a 1 conexión cada vez que el usuario quiera llevar a cabo una acción que implique acceso a la BD no? Es decir si insertar registros, creo una la abro y la cierro. Luego si decide ir a la opción modificar registros creo otra, la abro y la cierro, consultar registros, lo mismo.... Así?
No. Abres y cierras la conexión sin volver a crearla, si quieres, pero la idea es no volver a crear una instancia de MysqlConnection. Crear conexiones consume mucho tiempo de conexión, comparativamente. Es ineficiente crear tantos, y tarde o temprano saturarías el Pool de conexiones.
Por
sesión de usuario me refiero a que cada usuario de la aplicación tenga su propio username y clave en MySQL. De ese modo, cuando empieza a trabajar con datos usa siemrpe la misma sesión en la aplicación (al modo de sesión en este foro, por ejemplo).
Si creas una clase sesión,por ejemplo, podrías crear dentro de ella un objeto de la clase que maneja la relación con la base.
Yo, por ejemplo, tengo una clase denominada Sesion que se instancia al loguear contra MySQL. Esa clase contiene un objeto público que se denomina BaseDatos que es una instancia de una clase denominada MySQLDataBase y que tiene esta definición basica y variables de clase:
Código vb.net:
Ver originalOption Explicit On
Imports System.ComponentModel
Imports MySql.Data.MySqlClient
Imports Microsoft.Win32
Imports System
Imports System.Net
Imports System.Globalization
Imports System.IO
Imports System.Configuration.ConfigurationSettings
Public Class MysqlDataBase
' Variables de conexión ------------------------------------------------------
Public Conexion, CxText As MySqlConnection
Private strConexion As String
' Variables de transacción ----------------------------------------------------
Public Trans As MySqlTransaction
' Variables de lectura --------------------------------------------------------
Private Adapter As MySqlDataAdapter
Private LectorDatos As MySqlDataReader
' Variables de ejecucion ------------------------------------------------------
Private Sentencias As MySqlCommand
Private BuildSql As MySqlCommandBuilder
' Variables de error ----------------------------------------------------------
Private errorDb As MySqlError
' Variables de region ---------------------------------------------------------
Private nFI As NumberFormatInfo = New CultureInfo("en-US", False).NumberFormat
' Variables de uso interno ----------------------------------------------------
Private sSQL As String
' Métodos y funciones....
End Class
Con esto manejo todo.
Cita: .close y =Nothing ? Te refieres a eso?
Si en vez de DataReaders uso MySqlDataAdapter ? Igual?
Exactamente. Ciérralo y luego declaralo Nothing.
Los
MysqlDataAdapter no requieren eso porque mueren con la conexión, pero puedes hacer uso de su método
.Dispose y luego ponerlo a Nothing.
Como yo manejo una sola instancia de MysqlDataAdapter en la clase, y la uso todas las veces que requiera leer una tabla o cargar un dataset (volviendo a instanciarla, obviamente), solamente lo destruyo cuando se cierra la sesión.
Cita: Cita:
En lugar de declara simplemente Nothing una conexión solamente, destruye el objeto que la contiene.
Cómo lo hago?
Código:
Objeto=Nothing
Objeto=Dispose
Objeto=Nothing, donde
Objeto contenga una variable de clase de la clase MysqlConnection.