Как предположил Димитров, хороший подход - открывать и закрывать соединения только тогда, когда это необходимо, и держать их открытыми в кратчайшие сроки..NET Connection pool будет обрабатывать это для вас, поэтому соединения будут использоваться прозрачным образом для вас.
В целом, хороший подход заключается в том, чтобы иметь другую библиотеку классов, которая будет служить в качестве уровня доступа к данным, который обернет вызовы к базе данных.и не раскрывает какого-либо соединения или использования команды с пользовательским интерфейсом, поэтому в будущем вы сможете перейти на другой механизм базы данных, в конечном итоге, изменив только связь DAL.
от DALи пользовательский интерфейс должен состоять только из объектов (сущностей) или для простых проектов DataTables и DataSets.В большинстве случаев третий проект (библиотека классов) находится между ними и называется Business Logic, такой уровень манипулирует данными из DAL и применяет бизнес-логику вашего приложения, возвращая более чистые или подробные результаты в пользовательский интерфейс.
Я использовал этот подход во многих проектах уже около 11 лет.