2015-12-22 22 views
5

पर मैं निम्नलिखित कोड है:सी # - प्रयास करें-कैच-अंत में वापसी

public DataTable GetAllActiveUsers() 
{ 
      DataTable dataTable = new DataTable(); 

      try 
      { 
       connection.Open(); 

       SqlCommand getAllActiveUsersCommand = new SqlCommand(getAllUsers, connection); 

       SqlDataAdapter dataAdapter = new SqlDataAdapter(getAllActiveUsersCommand); 
       dataAdapter.Fill(dataTable); 

       return dataTable; 
      } 
      catch(Exception e) 
      { 
       Console.WriteLine(e); 

       return null; 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 

कौन सा मूल रूप से सक्रिय उपयोगकर्ताओं मैं अपने डेटाबेस पर है मिलता है। लेकिन क्या कोई मुझे बता सकता है कि Finally ब्लॉक को निष्पादित किया जाएगा यदि यह सफलतापूर्वक try ब्लॉक चलाता है और डेटाटेबल लौटाता है ??

धन्यवाद

+1

आप हमेशा इसे तोड़ सकते हैं। – choz

+0

बंद करने से पहले आपको कनेक्शन स्थिति (खुली है) की जांच करनी होगी। 'अंत में' ब्लॉक से त्रुटि से बचने के लिए। –

उत्तर

4

हां।

के रूप में यहां कहा गया है: MSDN

आमतौर पर, एक के बयानों अंत में रन ब्लॉक जब नियंत्रण एक कोशिश बयान छोड़ देता है। नियंत्रण का हस्तांतरण सामान्य निष्पादन के परिणामस्वरूप हो सकता है, ब्रेक के निष्पादन, जारी रखने, गोटो, या कथन, या प्रयास कथन से अपवाद के प्रचार के परिणामस्वरूप हो सकता है।

लेकिन अंत में ब्लॉक हमेशा निष्पादित नहीं है। आप एलेक्स Papadimoulis के उपाख्यान here

0

हाँ यह पढ़ सकते हैं।
आखिरकार ब्लॉक निष्पादित किया जाएगा कि क्या आपके try {} catch() ब्लॉक में रिटर्न स्टेटमेंट या फेंक दिया गया अपवाद है या नहीं।

1

अंततः ब्लॉक हमेशा निष्पादित किया जाता है।

आपको अंततः ब्लॉक में निपटान करना चाहिए। क्योंकि, निपटान भी कनेक्शन बंद कर देता है और अप्रबंधित स्मृति संसाधनों का निपटान करता है।

finally 
{ 
    connection.Dispose(); 
} 
संबंधित मुद्दे