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 InvalidOperationExceptionquand "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 trybloc s'arrêterait, le finallybloc 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?
Disposeexplicitement, mais mettez using:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finallybloc signifie autre chose que vous ne le pensez.