в блоке using - это SqlConnection, закрытый при возврате или исключении?

Первый вопрос:
Скажем, у меня

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

Закрывается ли соединение? Потому что технически мы никогда не доберемся до последнего } , как мы верните перед этим.

Второй вопрос:
На этот раз у меня:

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*/ }

Теперь, скажем, где-то в try мы получаем ошибку, и она обнаруживается. Остается ли соединение закрываются? Потому что мы снова пропускаем остальную часть кода в try и переходим непосредственно к оператору catch .

Я слишком линейно думаю о том, как использовать работает? Т.е. вызывается ли Dispose () просто, когда мы покидаем , используя область видимости?

133
задан jball 17 January 2011 в 21:01
поделиться