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 InvalidOperationExceptionquando "una chiamata al metodo non è valida per lo stato corrente dell'oggetto". Pertanto, se ciò accadesse, l'esecuzione del tryblocco si fermerebbe, il finallyblocco 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?
Disposeusingusing (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finallyblocco significa qualcos'altro di quanto pensi.