Пул соединений - это кеш соединений с базой данных. Пул приложений - это один (или несколько) рабочих процессов. Итак, когда вы закрываете пул приложений, вы закрываете свои рабочие процессы и запускаете новые рабочие процессы; это приведет к уничтожению пула и закрытию всех соединений в пуле соединений.
Если вы не вызываете Close или Dispose для соединения и полагаетесь на сборщик мусора, тогда соединение может или не может быть возвращено в пул. Я думаю, что он будет добавлен обратно в пул только в том случае, если соединение все еще действует и максимальный размер пула достигнут. Как вы, вероятно, знаете, вы никогда не должны полагаться на сборщик мусора для этого. Простой способ убедиться, что соединение установлено, это использовать оператор using, который автоматически вызовет Dispose в конце блока кода.
В ADO.NET 2.0 появились новые методы программного управления пулами: ClearAllPools и ClearPool. Это может помочь вам решить проблему, пока вы не исправите весь код доступа к данным.