รหัสนี้เป็นส่วนหนึ่งของแอปพลิเคชันที่อ่านและเขียนไปยังฐานข้อมูลที่เชื่อมต่อ 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
สิ่งที่บล็อกวิธีอื่นมากกว่าที่คุณคิด