none
Ocupar una sola conexión para todo mi proyecto RRS feed

  • Pregunta

  • Buenos días, estoy comenzando una Aplicación Windows Forms, pero me surje la siguiente duda:

    En todas las aplicaciones que e echo con anterioridad ocupo una conexion por cada Windows Form que se necesite conectar a la BD y quisiera saber de que manera puedo declarar solo una vez la conexión y acceder a ella las veces que la necesite.

    Espero su ayuda. GRACIAS.

    martes, 21 de junio de 2016 17:01

Respuestas

  • Poderse se puede pero recuerda que la programación con base de datos en .Net está pensada para funcionar de forma desconectada. Esto significa que debes mantener las coneciones el menor tiempo posible y necesario.

    Saludos, Javier J

    martes, 21 de junio de 2016 17:06
  • Hola Gspindola,

    Puedes crear una clase Conexion, y dentro una variable de tipo string que guarde la ruta.

        public class Conexion
        {
            public static string cadenaConexion = "Data Source=MiServidor;....";
        }

    Y cada vez que quieras usar la Conexion.

             using (SqlConnection con = new SqlConnection(Conexion.cadenaConexion))
                {
                    con.Open();
    
                    //Resto de código
                }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 21 de junio de 2016 17:08
  • Gspindola,

    Si tu proyecto de software contempla una arquitectura en capas entonces las conexiones no las deberías realizar en la UI (WinForm le llamas), la encargada de accionar las conexiones y operaciones contra la base de datos es la capa de acceso a datos.

    Pero si tu proyecto no contempla una arquitectura y en cambio juntas presentación, lógica y persistencia en la clase Form (que no es correcto sobre todo si tu proyecto de software es amplio) entonces lo mínimo que deberías tener son métodos (funciones) que ejecuten una acción y/o retornen valores en caso sea necesario.

    Sobre la duda que presentas, tampoco es correcto que instancies un objeto de tipo SqlConnection al nivel de la clase Form, si en tu formulario realizas 10 acciones distintas contra la base de datos (que reitero no es lo correcto acoplar funcionalidad) entonces 10 veces debes de abrir y cerrar conexiones (usando la instrucción using).  No tema abrir y cerrar conexiones, por lo general existe un pool de ellas disponibles para su uso que optimizan y agilizan los procesos de conexión.

    martes, 21 de junio de 2016 19:08

Todas las respuestas

  • Poderse se puede pero recuerda que la programación con base de datos en .Net está pensada para funcionar de forma desconectada. Esto significa que debes mantener las coneciones el menor tiempo posible y necesario.

    Saludos, Javier J

    martes, 21 de junio de 2016 17:06
  • Gspindola,

    No, no es lo correcto.

    Las buenas practicas recomiendan que debes declarar un objeto de tipo Connection sólo en el ámbito que requieras, de esa manera consigues que el objeto quede a disposición del GC luego de finalizar el bloque de uso.

    Using cn As New SqlConnection("CADENA_CONEXION")
          'Instrucciones
    End Using

    De esa manera el objeto de tipo Connection termina con la instrucción End Using y puedes asegurarte de no tener conexiones abiertas.

    • Propuesto como respuesta Sergio Parra martes, 21 de junio de 2016 17:39
    martes, 21 de junio de 2016 17:06
  • Hola Gspindola,

    Puedes crear una clase Conexion, y dentro una variable de tipo string que guarde la ruta.

        public class Conexion
        {
            public static string cadenaConexion = "Data Source=MiServidor;....";
        }

    Y cada vez que quieras usar la Conexion.

             using (SqlConnection con = new SqlConnection(Conexion.cadenaConexion))
                {
                    con.Open();
    
                    //Resto de código
                }

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    martes, 21 de junio de 2016 17:08
  • Es decir que hago bien hasta ahora declarando una conexion por cada WinForm que ocupo ?
    martes, 21 de junio de 2016 18:55
  • Gspindola,

    Si tu proyecto de software contempla una arquitectura en capas entonces las conexiones no las deberías realizar en la UI (WinForm le llamas), la encargada de accionar las conexiones y operaciones contra la base de datos es la capa de acceso a datos.

    Pero si tu proyecto no contempla una arquitectura y en cambio juntas presentación, lógica y persistencia en la clase Form (que no es correcto sobre todo si tu proyecto de software es amplio) entonces lo mínimo que deberías tener son métodos (funciones) que ejecuten una acción y/o retornen valores en caso sea necesario.

    Sobre la duda que presentas, tampoco es correcto que instancies un objeto de tipo SqlConnection al nivel de la clase Form, si en tu formulario realizas 10 acciones distintas contra la base de datos (que reitero no es lo correcto acoplar funcionalidad) entonces 10 veces debes de abrir y cerrar conexiones (usando la instrucción using).  No tema abrir y cerrar conexiones, por lo general existe un pool de ellas disponibles para su uso que optimizan y agilizan los procesos de conexión.

    martes, 21 de junio de 2016 19:08