Цей код є частиною програми, яка читає і записує в базу даних, підключений до 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
Блок означає що - то інше , ніж ви думаєте.