このコードは、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
ブロックは、あなたが考えているよりも何かを意味します。