Creando conexiones de base de datos: ¿hacerlo una vez o para cada consulta?

85

En este momento creo una conexión de base de datos cuando mi página web se carga por primera vez. Luego proceso la página y ejecuto cualquier consulta contra esa conexión. ¿Es esta la mejor manera de hacerlo o debo crear una conexión de base de datos cada vez que ejecuto una consulta?

p.s Para mí tiene más sentido crear 1 conexión y usarla, pero no sé si esto puede causar otros problemas.

Estoy usando C # (ASP.NET) con MSSQL.

    
pregunta webnoob 29.03.2012 - 11:40

2 respuestas

101

Si crea uno por consulta / transacción, es mucho más fácil administrar el "cierre" de las conexiones.

Puedo ver por qué el sentido común dicta que debes abrir uno y usarlo en todo momento, pero tendrás problemas con las conexiones caídas y los subprocesos múltiples. Así que su próximo paso será abrir una piscina, digamos de 50, conexiones y mantenerlas abiertas, repartiéndolas en diferentes procesos. Y luego descubrirá que esto es exactamente lo que hace el marco .NET para ti ya .

Si abre una conexión cuando la necesita y la desecha cuando termina, eso no cerrará la conexión, simplemente la devolverá al grupo de conexiones para que se vuelva a usar.

    
respondido por el pdr 29.03.2012 - 11:53
33

La práctica recomendada es crear una conexión por consulta, y en el caso de mostrar datos, la práctica recomendada es que la consulta incluya todos los datos necesarios de una sola vez.

Información de fondo:

En .NET, llamar a SqlConnection.Open() de forma predeterminada siempre usará de manera transparente agrupación de conexiones (consulte "Utilización de agrupación de conexiones con SQL Server " en MSDN). Así que solo puedes tomar una nueva conexión usando Open() , y llamar a Close() cuando hayas terminado, y .NET hará lo correcto.

Tenga en cuenta que sin la agrupación de conexiones, una conexión por consulta sería una muy mala idea porque crear conexiones de base de datos reales puede ser muy costoso (autenticación, sobrecarga de red, etc.) y el número de conexiones abiertas simultáneas suele ser muy limitado. / p>     

respondido por el Oded 29.03.2012 - 11:44

Lea otras preguntas en las etiquetas