Kode ini adalah bagian dari aplikasi yang membaca dari dan menulis ke database yang terhubung dengan ODBC. Ini membuat rekaman dalam database dan kemudian memeriksa apakah rekaman telah berhasil dibuat, kemudian kembali true
.
Pemahaman saya tentang aliran kendali adalah sebagai berikut:
command.ExecuteNonQuery()
didokumentasikan untuk memunculkan InvalidOperationException
ketika "panggilan metode tidak valid untuk status objek saat ini". Oleh karena itu, jika itu terjadi, eksekusi try
blok akan berhenti, finally
blok akan dieksekusi, kemudian akan dieksekusi return false;
di bagian bawah.
Namun, IDE saya mengklaim bahwa return false;
kode tersebut tidak dapat dijangkau. Dan tampaknya benar, saya dapat menghapusnya dan mengkompilasi tanpa keluhan. Namun, bagi saya sepertinya tidak akan ada nilai kembali untuk jalur kode tempat pengecualian yang disebutkan dilemparkan.
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;
}
Apa kesalahan pemahaman saya di sini?
Dispose
secara eksplisit, tetapi tuliskan using
:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
blok berarti sesuatu yang lain dari yang Anda pikirkan.