2015-12-22 10 views
5

に、私は次のコードを持っている:C#の - のtry-catch-最後にリターン

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

基本的に私は私のデータベースに持っているアクティブユーザーのget。しかし、tryブロックが正常に実行され、DataTableを返す場合、Finallyブロックが実行されるかどうかを誰かに説明することはできますか?

おかげ

+1

いつでもブレークポイントできます。 – choz

+0

閉じる前に接続状態(開いている)を確認する必要があります。 'finally'ブロックによるエラーを避けるため。 –

答えて

4

はい。

ここに述べたように:コントロールが tryステートメントを離れる場合、通常MSDN

、ようやくのステートメントは、実行をブロックします。コントロールの転送は、通常の の実行、ブレークの実行、続行、ジャンプ、または ステートメントの返信、またはtryステートメントからの例外の伝播の結果として発生する可能性があります。

最終的にブロックはであり、常には実行されません。あなたはAlex Papadimoulisの逸話を読むことができますhere

0

はいそうです。
try {} catch()ブロックにreturn文またはスローされた例外があるかどうかにかかわらずfinallyブロックが実行されます。

1

finallyブロックが常に実行されます。

最終的にブロックする必要があります。また、disposeも接続を閉じ、管理されていないメモリリソースを破棄するためです。

finally 
{ 
    connection.Dispose(); 
} 
関連する問題