Maison >développement back-end >C++ >SqlConnection se ferme-t-il dans un bloc 'Using' en cas de retour ou d'exception ?
using
Comportement de fermeture de SqlConnection dans le bloc d'instructions : valeurs de retour et exceptions
using
Le bloc de relevés sera-t-il fermé SqlConnection
en cas de retour ou d'exception ? Explorons ce comportement :
Première question :
Dans le bloc de code suivant :
<code class="language-csharp">using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string storedProc = "GetData"; SqlCommand command = new SqlCommand(storedProc, connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID)); return (byte[])command.ExecuteScalar(); }</code>
Réponse : Oui, la connexion sera fermée.
Le bloc d'instructionsusing
garantit que les ressources IDisposable
(c'est-à-dire SqlConnection
) sont correctement libérées même en cas de retour anticipé. Lorsque le code sort du bloc using
, la méthode Dispose()
(qui ferme la connexion) est automatiquement appelée.
Deuxième question :
Dans ce bloc de code :
<code class="language-csharp">try { using (SqlConnection connection = new SqlConnection(connectionString)) { int employeeID = findEmployeeID(); connection.Open(); SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection); command.CommandType = CommandType.StoredProcedure; command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID)); command.CommandTimeout = 5; command.ExecuteNonQuery(); } } catch (Exception) { /*处理错误*/ }</code>
Réponse : Oui, la connexion sera toujours fermée.
Même si une exception est levée dans le bloc d'instructions using
, le code passera immédiatement au bloc catch
, et à la sortie du bloc d'instructions using
, SqlConnection
sera toujours libéré.
Résumé :
Que le bloc d'instructions using
se termine via une valeur de retour ou une exception, SqlConnection
sera toujours fermé pour assurer le nettoyage des ressources.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!