Этот код является частью приложения, которое выполняет чтение и запись в базу данных, подключенную к 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Блок означает что - то другое , чем вы думаете.