Первый вопрос:
Скажем, у меня
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();
}
Закрывается ли соединение? Потому что технически мы никогда не доходим до последнего }
, пока мы return
до него.
Второй вопрос:
На этот раз я:
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
.
Думаю ли я слишком линейно, как работает using
? т.е. вызывает ли Dispose()
вызов, когда мы оставляем область using
?