Ответ Мо Сиско (Зов SqlConnection.ClearPool
) правильный.
Иногда вам нужно соединение, чтобы действительно закрыть, а не вернуться в пул. Например, у меня есть модульный тест, который создает чистую базу данных, строит схему, проверяет некоторые вещи, а затем удаляет чистую базу данных, если все тесты пройдены.
Когда пул соединений активен, команда сброса базы данных не выполняется, поскольку все еще существуют активные соединения. С точки зрения программиста, все SQLConnections закрыты, но, поскольку пул все еще держит один открытый, SQL Server не допустит удаления.
Лучшая документация о том, как обрабатывается пул соединений, - эта страница о пуле соединений SQL Server в MSDN. Никто не хочет полностью отключать пул соединений, потому что это улучшает производительность при многократных открытиях и закрытиях, но иногда вам нужно вызвать «принудительное закрытие» для SQLConnection, чтобы он освободил базу данных.
Это делается с помощью ClearPool. Если вы позвоните SqlConnection.ClearPool(connection)
до закрытия / утилизации, когда вы действительно закроете / утилизируете, он действительно исчезнет.