Este código es parte de una aplicación que lee y escribe en una base de datos conectada a ODBC. Crea un registro en la base de datos y luego verifica si se ha creado correctamente un registro y luego regresa true
.
Mi comprensión del flujo de control es la siguiente:
command.ExecuteNonQuery()
está documentado para lanzar un InvalidOperationException
cuando "una llamada a un método no es válida para el estado actual del objeto". Por lo tanto, si eso sucediera, la ejecución del try
bloque se detendría, el finally
bloque se ejecutaría y luego se ejecutaría return false;
en la parte inferior.
Sin embargo, mi IDE afirma que el return false;
código es inalcanzable. Y parece ser cierto, puedo eliminarlo y se compila sin quejas. Sin embargo, para mí parece que no habría ningún valor de retorno para la ruta del código donde se lanza la excepción mencionada.
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;
}
¿Cuál es mi error de comprensión aquí?
Dispose
using
using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
bloque significa algo más de lo que crees.