IDataReader.Dispose() закрывает соединение?

Типичный шаблон выполнения запроса, который я унаследовал, выглядит так:

using (IDataReader r = query.ExecuteReader())
{
  while (r.Read())
  {
    // etc.
  }
}

Является query.Connection оставить открытым после using блок вышел?

2 ответа

Решение

Нет; соединение не будет закрыто, пока вы не избавитесь от соединения.

Однако, если вы пройдете CommandBehavior.CloseConnection, соединение будет закрыто.

ExecuteReader(CommandBehavior.CloseConnection)

Это закроет соединение, когда у читателя close() вызываемый метод (который происходит, когда dispose() метод вызывается с помощью using блок.

В идеале вы бы использовали using заблокировать с вашим SqlConnection объект (или вызов dispose() вручную внутри finally блок), не только чтобы закрыть соединение, но и освободить ресурсы.

Другие вопросы по тегам