Этот код является частью приложения, которое выполняет чтение и запись в базу данных, подключенную к ODBC. Он создает запись в базе данных, а затем проверяет, была ли запись успешно создана, а затем возвращается true
.
Я понимаю поток управления следующим образом:
command.ExecuteNonQuery()
задокументирован для выдачи сообщения, InvalidOperationException
когда «вызов метода недопустим для текущего состояния объекта». Следовательно, если это произойдет, выполнение try
блока остановится, finally
блок будет выполнен, а затем выполнится return false;
внизу.
Однако моя IDE утверждает, что return false;
это недостижимый код. И вроде правда, могу удалить и компилируется без нареканий. Однако мне кажется, что не будет возвращаемого значения для пути кода, в котором выбрасывается упомянутое исключение.
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;
}
В чем моя ошибка понимания здесь?
Dispose
, а поставить using
:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
Блок означает что - то другое , чем вы думаете.