यह कोड एक एप्लिकेशन का हिस्सा है जो ODBC से जुड़े डेटाबेस से पढ़ता है और लिखता है। यह डेटाबेस में एक रिकॉर्ड बनाता है और फिर जांचता है कि क्या रिकॉर्ड सफलतापूर्वक बनाया गया है, तो वापस लौट रहा है true
।
नियंत्रण प्रवाह की मेरी समझ इस प्रकार है:
command.ExecuteNonQuery()
InvalidOperationException
जब "एक विधि कॉल वस्तु की वर्तमान स्थिति के लिए अमान्य है" फेंकने के लिए प्रलेखित है । इसलिए, यदि ऐसा होता है, तो try
ब्लॉक का निष्पादन बंद हो जाएगा, finally
ब्लॉक निष्पादित हो जाएगा, फिर return false;
सबसे नीचे निष्पादित होगा ।
हालांकि, मेरी आईडीई का दावा है कि 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
ब्लॉक का मतलब आपके विचार से कुछ और है।