.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í.
Según MSDN, no necesita la instrucción close.
"El siguiente ejemplo crea una conexión Sql, la abre, muestra algunas de sus propiedades. La conexión se cierra automáticamente al final del bloque de uso". - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx
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á.