Par mon autre question ici sur les objets jetables , devrions-nous appeler Close () avant la fin d'un bloc using?
using (SqlConnection connection = new SqlConnection())
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "INSERT INTO YourMom (Amount) VALUES (1)";
command.CommandType = System.Data.CommandType.Text;
connection.Open();
command.ExecuteNonQuery();
// Is this call necessary?
connection.Close();
}
c#
asp.net
using
sqlconnection
sqlcommand
John Bubriski
la source
la source
Désassemblage de SqlConnection de l'utilisation de .NET Reflector :
Il appelle Close () à l'intérieur de Dispose ()
la source
Le mot-clé using fermera la connexion correctement afin que l'appel supplémentaire à Close ne soit pas nécessaire.
De l'article MSDN sur le pool de connexions SQL Server :
L'implémentation réelle de SqlConnection.Dispose à l'aide de .NET Reflector est la suivante:
la source
En utilisant Reflector , vous pouvez voir que la
Dispose
méthode deSqlConnection
appelle réellementClose()
;la source
Non, l'appel de Dispose () sur SqlConnection appelle également Close ().
MSDN - SqlConnection.Dispose ()
la source
Non, le blocage Utilisation des appels
Dispose()
pour vous de toute façon, il n'est donc pas nécessaire d'appelerClose()
.la source
Dispose()
appelsClose()
, pas l'inverse?Non, il n'est pas nécessaire de fermer une connexion avant d'appeler Dispose.
Certains objets (comme SQLConnections) peuvent être réutilisés après l'appel de Close, mais pas après l'appel de Dispose. Pour les autres objets, appeler Close équivaut à appeler Dispose. (ManualResetEvent et Streams, je pense, se comportent comme ça)
la source
Non, la classe SqlConnection hérite de IDisposable, et lorsque la fin de l'utilisation (pour l'objet de connexion) est rencontrée, elle appelle automatiquement la classe Dispose sur la classe SqlConnection.
la source