Mã này là một phần của ứng dụng đọc và ghi vào cơ sở dữ liệu được kết nối ODBC. Nó tạo một bản ghi trong cơ sở dữ liệu và sau đó kiểm tra xem một bản ghi đã được tạo thành công hay chưa, sau đó trả về true
.
Hiểu biết của tôi về luồng điều khiển như sau:
command.ExecuteNonQuery()
được ghi lại để ném một InvalidOperationException
khi "một cuộc gọi phương thức không hợp lệ cho trạng thái hiện tại của đối tượng". Do đó, nếu điều đó xảy ra, việc thực thi try
khối sẽ dừng lại, finally
khối sẽ được thực thi, sau đó sẽ thực thi return false;
ở dưới cùng.
Tuy nhiên, IDE của tôi tuyên bố rằng return false;
mã không thể truy cập được. Và nó có vẻ là sự thật, tôi có thể gỡ bỏ nó và nó biên dịch mà không có bất kỳ phàn nàn nào. Tuy nhiên, đối với tôi, có vẻ như sẽ không có giá trị trả về cho đường dẫn mã mà ngoại lệ được đề cập được ném ra.
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;
}
Tôi hiểu sai ở đây là gì?
Dispose
một cách rõ ràng, nhưng đặt using
:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finally
khối có nghĩa là một cái gì đó khác hơn bạn nghĩ.