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
блок), не только чтобы закрыть соединение, но и освободить ресурсы.