em um bloco "using" um SqlConnection é fechado no retorno ou exceção?

Primeira pergunta:
Diga que eu tenho

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    string storedProc = "GetData";
    SqlCommand command = new SqlCommand(storedProc, connection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));

    return (byte[])command.ExecuteScalar();
}

A conexão é fechada? Porque tecnicamente nunca chegamos ao último} como nósreturn antes disso.

Segunda questão:
Desta vez eu tenho:

try
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        int employeeID = findEmployeeID();

        connection.Open();
        SqlCommand command = new SqlCommand("UpdateEmployeeTable", connection);
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.Add(new SqlParameter("@EmployeeID", employeeID));
        command.CommandTimeout = 5;

        command.ExecuteNonQuery();
    }
}
catch (Exception) { /*Handle error*/ }

Agora, diga em algum lugar dotry nós recebemos um erro e ele é pego. A conexão ainda é fechada? Porque, novamente, pulamos o restante do código notry e vá diretamente para ocatch declaração.

Estou pensando linearmente em comousing trabalho? ieDispose() basta ser chamado quando deixamos ousing escopo?

questionAnswers(7)

yourAnswerToTheQuestion