c# tsql ado.net

c# - ado.net Cerrando la conexión al usar la declaración "using"



tsql (7)

Como comentario adicional, puede hacer que el código sea más conciso y legible de la siguiente manera:

using (SqlConnection con = new SqlConnection(/*connection string*/)) using (SqlCommand cmd = new SqlCommand(storedProcname, con)) { //... }

Estoy haciendo mis métodos de acceso a la base de datos a SQL Server como este

using (SqlConnection con = new SqlConnection(//connection string) { using (SqlCommand cmd = new SqlCommand(storedProcname, con)) { try{ con.open(); //data reader code } catch { } } }

¿Tengo que cerrar o deshacerme de SqlCommand, o la declaración de uso se ocupará de eso por mí? Simplemente no quiero que la conexión se cuelgue abierta Gracias


Como dijo Phil, la cláusula de uso se ocupará de eso por ti. Cuando se compila, envuelve la conexión create in try ... finalmente y coloca la llamada de eliminación de la conexión dentro de finally.

Para obtener más información, puede ver el artículo de la declaración using en msdn .


Creo que "usar" no fue requerido para SqlCommand. "Usar" para SqlConnection habría hecho el trabajo solo para usted. De hecho, su conexión se envía al grupo de conexiones.


El using se encargará de eso por ti. Bajo el capó, SqlConnection.Dispose() llama al método SqlConnection.Close() y SqlCommand.Dispose() llama a SqlCommand.Close() .

Como antecedentes adicionales, una declaración de using es azúcar sintáctica para try ... finally eso elimina el objeto IDisposable en el IDisposable .


Sí, su código cerrará la conexión, sin embargo, eso normalmente significa que volverá a liberarse al grupo de conexiones para que se cierre definitivamente más adelante.

Si ejecuta este fragmento de código, y luego hace un sp_who y observa que su conexión todavía está allí, ese sería el motivo.

Si necesita absolutamente la conexión verdaderamente cerrada (una caja de borde para estar seguro), entonces use el método estático ClearAllPools de esta SqlConnection


cuando el alcance

using (SqlConnection con = new SqlConnection(//connection string) { }

una vez más, la conexión será eliminada automáticamente por el tiempo de ejecución. así que no te preocupes


Using palabra clave cerrará automáticamente la conexión para que no tenga que preocuparse de llamar a connection.close() al final cada vez.