Questo codice fa parte di un'applicazione che legge e scrive in un database connesso ODBC. Crea un record nel database e quindi controlla se un record è stato creato correttamente, quindi restituisce true
.
La mia comprensione del flusso di controllo è la seguente:
command.ExecuteNonQuery()
è documentato per lanciare un InvalidOperationException
quando "una chiamata al metodo non è valida per lo stato corrente dell'oggetto". Pertanto, se ciò accadesse, l'esecuzione del try
blocco si fermerebbe, il finally
blocco verrebbe eseguito, quindi eseguirà il return false;
in fondo.
Tuttavia, il mio IDE afferma che il return false;
codice non è raggiungibile. E sembra essere vero, posso rimuoverlo e si compila senza lamentele. Tuttavia, per me sembra che non ci sarebbe alcun valore di ritorno per il percorso del codice in cui viene generata l'eccezione menzionata.
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;
}
Qual è il mio errore di comprensione qui?
Dispose
using
using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
blocco significa qualcos'altro di quanto pensi.