.net sql sql-server vb.net

.net - ¿Finaliza el uso de cerrar una conexión de SQL abierta



sql-server vb.net (6)

Si envuelvo un SQLConnection en un Uso, ¿debería cerrarlo o el final al usarlo?

using cn as new system.data.sqlclient.sqlconnection() cn.open ''{do a bunch of other stuff with commands and datareaders here} cn.close ''Do I need this? end using


"Un bloque Using se comporta como Try ... Finalmente la construcción en la que el bloque Try usa los recursos y el bloque Finally los descarta, por lo que el bloque Using garantiza la eliminación de los recursos, sin importar cómo salgas del bloque. Esto es cierto incluso en el caso de una excepción no controlada, a excepción de una Exception ".
https://msdn.microsoft.com/en-us/library/htd05whh.aspx


Al salir de un bloque en uso, se llama a .Dispose () en el objeto en cuestión ( cn en su ejemplo), que para un SqlConnection cerrará la conexión y todos los recursos abiertos.


Llamar más precisamente Dispose o Close marcará la conexión física subyacente como "No está en uso", pero en realidad no la cierra. Por lo tanto, está disponible una conexión "No en uso" que aún no está físicamente cerrada para la puesta en común. Por lo tanto, al llamar a Dispose se devolverá una conexión al grupo de conexiones.


Mientras que el método Dispose de SQL cierra la conexión (eventualmente de acuerdo con darin) debes dejar la llamada para cerrar ahí. La razón es que confiaría en la implementación subyacente de Dispose para llamar close. Ver también un Abrir sin Cerrar es como ver un Nuevo sin Eliminar para aquellos de nosotros que hemos programado en idiomas no administrados. Es un olor de código para mí.



usar es solo una abreviatura para probar / finalmente. este es un código equivalente a lo que publicaste

Try SqlConnection cn as new system.data.sqlclient.sqlconnection() cn.open ''{do a bunch of other stuff with commands and datareaders here} cn.close ''Do I need this? Finally cn.Dispose() End Try

Dispose debe ocuparse de la limpieza de todos los recursos; en el caso de las conexiones, lo cerrará.