C# - Try-Catch-Finally on Return

Yes.

As stated here: MSDN

Typically, the statements of a finally block run when control leaves a try statement. The transfer of control can occur as a result of normal execution, of execution of a break, continue, goto, or return statement, or of propagation of an exception out of the try statement.

But finally block is not always executed. You can read Alex Papadimoulis's anecdote here


Yes, it does.
The finally block will be executed whether there is a return statement or an exception thrown in the try {} catch() block.


finally block is always executed.

you should Dispose in finally block. Because, dispose also closes the connection and disposes unmanaged memory resources.

finally
{
    connection.Dispose();
}