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 InvalidOperationExceptionkhi "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 trykhối sẽ dừng lại, finallykhố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ì?
Disposemột cách rõ ràng, nhưng đặt using:using (var command = ...) {command.CommandText = sb.ToString(); return command.ExecuteNonQuery(); }
finallykhối có nghĩa là một cái gì đó khác hơn bạn nghĩ.