Ce code fait partie d'une application qui lit et écrit dans une base de données connectée ODBC. Il crée un enregistrement dans la base de données, puis vérifie si un enregistrement a été créé avec succès, puis revient true
.
Ma compréhension du flux de contrôle est la suivante:
command.ExecuteNonQuery()
est documenté pour lancer un InvalidOperationException
quand "un appel de méthode n'est pas valide pour l'état actuel de l'objet". Par conséquent, si cela se produisait, l'exécution du try
bloc s'arrêterait, le finally
bloc serait exécuté, puis exécuterait le return false;
en bas.
Cependant, mon IDE prétend que le return false;
code est inaccessible. Et cela semble être vrai, je peux le supprimer et il se compile sans aucune plainte. Cependant, pour moi, il semble qu'il n'y aurait pas de valeur de retour pour le chemin du code où l'exception mentionnée est levée.
private static bool createRecord(String table,
IDictionary<String,String> data,
System.Data.IDbConnection conn,
OdbcTransaction trans) {
[... some other code ...]
int returnValue = 0;
try {
command.CommandText = sb.ToString();
returnValue = command.ExecuteNonQuery();
return returnValue == 1;
} finally {
command.Dispose();
}
return false;
}
Quelle est mon erreur de compréhension ici?
Dispose
explicitement, mais mettez using
:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
bloc signifie autre chose que vous ne le pensez.