2015-12-22 13 views
5

Ich habe den folgenden Code:C# - Try-Catch-finally auf Return

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(); 
      } 
     } 

die im Grunde erhalten ist die aktiven Benutzer mich auf meiner Datenbank. Aber kann mir jemand erklären, ob der Finally Block ausgeführt wird, wenn er den try Block erfolgreich ausführt und das DataTable zurückgibt ??

Dank

+1

Sie können immer nur Breakpoint es. – choz

+0

Sie müssen den Verbindungsstatus überprüfen (ist offen), bevor Sie schließen. Um Fehler von 'endlich' Block zu vermeiden. –

Antwort

4

Ja.

Wie hier angegeben: MSDN

Typischerweise sind die Aussagen eines schließlich Lauf blockieren, wenn die Steuerung lässt eine try-Anweisung. Die Übertragung der Kontrolle kann als Ergebnis der normalen Ausführung, der Ausführung einer Anweisung "break", "continue", "goto" oder "return" oder der Propagierung einer Ausnahme aus der try-Anweisung erfolgen.

Aber schließlich Block ist nicht immer ausgeführt. Sie können lesen Alex Papadimoulis Anekdote here

0

Ja, es tut.
Der finally-Block wird ausgeführt, ob eine Return-Anweisung oder eine geworfene Ausnahme in Ihrem try {} catch()-Block vorliegt.

1

Schließlich wird der Block immer ausgeführt.

sollten Sie in Block endgültig entsorgen. Weil, dispose auch die Verbindung schließt und nicht gemanagte Speicherressourcen disponiert.

finally 
{ 
    connection.Dispose(); 
}