none
Como administrar correctamente las conexiones de la base de datos? RRS feed

  • Pregunta

  • Hola, les escribo porque necesito su consejo.
    Tengo una página web aspx, la cuál está programada en c#.
    En la lógica de la aplicación tengo una clase llamada datos, la cuál administra todos los métodos para hacer las consultas a la  base de datos. Lo que quisiera saber es cómo es la forma mas eficiente de administrar las conexiones a la base de datos para que no se produzcan TimeOuts.
    Es una buena manera administrar una conexión desde el global.asax? Cómo se hace? Hay alguna otra mejor forma?

    Gracias!
    lunes, 25 de mayo de 2009 15:00

Respuestas

  • hola,

    El HttpContext.Current basicamente te permite acceder al contexto en el que se ejecuta tu aplicacion web, es por ello que suando el HttpContext, tendras acceso a tus objetos de session,

    el HttpContext.Current te permitira trabajar con items que solo duran lo que dure tu request, o sea cuando la llamda termine y devuelva el resultado a cliente este se destruira.

    Con respecto a la implementacion del link veras que el autor aclara que este codigo puede funcionar tanto en web como en winforms, porque swichea a HttpContext.Current si este existe o a oInstance, si esta en winforms.
    por ahi podrias eliminar la parte de ese static si es que nunca lo utilizaras en entorno desktop.

    el item que deberias almacener es tu Connection, y devolver este con respecto a la apertura podrias hacer en el singleton creando los metoso que te abstraigan de este o podrias obtener el objeto conexion y realziar la aaprtura desde fuera es indistinto.

    Lo que implementaria es un dispose, y un destructor, es importante que estos si esten en el singleton para verificar que la conexion este bien cerrada.

    podrias hacer uso de las propiedades de estado del objeto connection para verificar esto, tambien verifica que la conexion no este en null, cuando intentes cerrarla ya que puede ser que nadie la instanciara.

    saludos

    Leandro Tuttini
    lunes, 25 de mayo de 2009 17:21

Todas las respuestas

  • Tu cadena de conexion la puedes declarar dentro de tu WebConfig

     <connectionStrings>
        <add name="nombreconexion" connectionString="Data Source=tuserver;database=tubasededatos;Integrated Security=True;" providerName="System.Data.SqlClient"/>
        </connectionStrings>

    Y ya que la recuperes

    string cadena = ConfigurationManager.ConnectionStrings["nombreconexion"].ConnectionString;

    Te recomiendo cada que ejecutes un proceso que abras y cierres la conexion

    SUERTE!!


    La verdadera sabiduría está en reconocer la propia ignorancia Visita: VicoNet
    • Propuesto como respuesta Oaxas jueves, 7 de junio de 2012 16:35
    • Votado como útil Oaxas jueves, 7 de junio de 2012 16:36
    lunes, 25 de mayo de 2009 15:56
  • hola,

    creo que Gonzalo se refiere es a como mantener la conexion en un ambiente web, mas alla de como acceder a string de conexion.

    Singleton pattern for ASP.NET

    Lo que deberias implementar es una clase que haga uso del patron singleton, la cual en tu caso te devolvera el objeto connection, pero siempre devolvera el mismo para todo el request.

    O sea desde toda tu capa de datos simpre deberias llamr a esta clase singleton que te devolvera la misma instancia de conexion.

    En el ejemplo del link no esta implementada la conexion, pero si la forma en se que devuelve una unica instancia.

    Ten en cuanta de utilizar el objeto HttpContext.Current, y en este las opciones de Items, ya que esto te determinara que la conexions era unica por request, no lo pongas dentro de una Session ya que sino tendras conexiones activas miestras dure la session de asp.net, y esto no es bueno para el motor de base de datos, pero por request si lo es, ya que podras crear transacciones para ese hilo o proceso que ejecute el usuario.

    saludos
    Leandro Tuttini
    • Propuesto como respuesta Oaxas jueves, 7 de junio de 2012 16:36
    lunes, 25 de mayo de 2009 16:34
  • hola,

    creo que Gonzalo se refiere es a como mantener la conexion en un ambiente web, mas alla de como acceder a string de conexion.

    Singleton pattern for ASP.NET

    Lo que deberias implementar es una clase que haga uso del patron singleton, la cual en tu caso te devolvera el objeto connection, pero siempre devolvera el mismo para todo el request.

    O sea desde toda tu capa de datos simpre deberias llamr a esta clase singleton que te devolvera la misma instancia de conexion.

    En el ejemplo del link no esta implementada la conexion, pero si la forma en se que devuelve una unica instancia.

    Ten en cuanta de utilizar el objeto HttpContext.Current, y en este las opciones de Items, ya que esto te determinara que la conexions era unica por request, no lo pongas dentro de una Session ya que sino tendras conexiones activas miestras dure la session de asp.net, y esto no es bueno para el motor de base de datos, pero por request si lo es, ya que podras crear transacciones para ese hilo o proceso que ejecute el usuario.

    saludos
    Leandro Tuttini

    Eso es lo que estaba buscando! La verdad que conocía el Síngleton.. no se como no se me ocurrió antes.
    Me puedes explicar un poco que es lo que hace el HttpContext.Current en éste ejemplo de patrón con mi conexión?
    Otra cosa.. el link que me pasaste.. lo único que debo cambiar es el objeto private static mySingleton oInstance; por el de la conexión no?
    Ya que no entiendo muy bien como hacer.. creo la conexión ahí mismo y la abro ahí mismo o la abro cada vez que la pida?
    Gracias!
    lunes, 25 de mayo de 2009 17:02
  • hola,

    El HttpContext.Current basicamente te permite acceder al contexto en el que se ejecuta tu aplicacion web, es por ello que suando el HttpContext, tendras acceso a tus objetos de session,

    el HttpContext.Current te permitira trabajar con items que solo duran lo que dure tu request, o sea cuando la llamda termine y devuelva el resultado a cliente este se destruira.

    Con respecto a la implementacion del link veras que el autor aclara que este codigo puede funcionar tanto en web como en winforms, porque swichea a HttpContext.Current si este existe o a oInstance, si esta en winforms.
    por ahi podrias eliminar la parte de ese static si es que nunca lo utilizaras en entorno desktop.

    el item que deberias almacener es tu Connection, y devolver este con respecto a la apertura podrias hacer en el singleton creando los metoso que te abstraigan de este o podrias obtener el objeto conexion y realziar la aaprtura desde fuera es indistinto.

    Lo que implementaria es un dispose, y un destructor, es importante que estos si esten en el singleton para verificar que la conexion este bien cerrada.

    podrias hacer uso de las propiedades de estado del objeto connection para verificar esto, tambien verifica que la conexion no este en null, cuando intentes cerrarla ya que puede ser que nadie la instanciara.

    saludos

    Leandro Tuttini
    lunes, 25 de mayo de 2009 17:21
  • La verdad es muy util la informacion que nos dio, se me hace raro que no la hallas votado  o propuesto como respuesta.

    Tenemos suficiente para desenredar la madeja, a seguir googleando. XP

    jueves, 7 de junio de 2012 16:38