이 코드는 ODBC 연결 데이터베이스에서 읽고 쓰는 응용 프로그램의 일부입니다. 데이터베이스에 레코드를 만든 다음 레코드가 성공적으로 생성되었는지 확인한 다음 true
.
제어 흐름에 대한 나의 이해는 다음과 같습니다.
command.ExecuteNonQuery()
InvalidOperationException
"객체의 현재 상태에 대해 메서드 호출이 유효하지 않음" 을 throw하도록 문서화되어 있습니다. 따라서 이런 일이 발생하면 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
블록은 당신이 생각하는 것보다 다른 것을 의미한다.