Какой способ подключения к БД на C# правильный?
Все, что выполняет поставленную задачу - правильно. Все, что позволяет потом поддерживать и масштабировать код - еще правильней.
В бизнес проектах через конструктор никто, конечно, код для бд не пишет. Чаще всего для мапинга с бд используют какую-нибудь ORM (EF, Dapper), руками пишут модели, которые потом будут мапиться на таблицы бд, прописывают их связи.
Обычно используют ConnectionString и ConnectionStringBuilder
Строка соединения храниться где то в appSerrings или connectionStrings, конфигурационного файла. 
Дальше в зависимости от приложения, каким то образом она передается в ORM или  непосредственно в драйвер. 
Если нужно динамически ее собирать, то выводят интерфейс для сборки. 
В ASP Net, используются  WebConfig Transformation, net core, обходятся подменой конфига. 
Кроме того в энтерпрайзе часто использую многозвенчатую архитектуру:
Pesentation layer - отображение  результатов
BL layer - логика приложения
DB layer - логика базы данных
Но часто BL работает в самой базе данных. Триггеры, проверки, табличные типы, география, шифрование