Звучит так, будто вы ищете большую теоретическую книгу, написанную для одного очень конкретного случая, то есть, какова лучшая практика для управления нашей текущей структурой SQL-кода для спагетти, и я не знаю, что когда-либо видел книгу или документ, который описывает это.
При этом мы несколько лет назад преобразовали несколько приложений из VB6 в C # и были в одном месте. Помимо разделения отдельных модулей, чтобы в целом их организация имела более логичный смысл, наши приложения практически такие же, какими они были, просто переписанные в C #. Мне лично не нравится идея отделить код SQL от функции, для которой он был написан (что-то вроде того, что вы пытаетесь сделать); в общем, если у нас есть функция, которая должна поразить базу данных, мы создаем SqlCommand и, необязательно, SqlDataReader, устанавливаем для CommandType значение StoredProcedure и добавляем параметры, затем выполняем вызов и используем результат, выполняя с ним все, что угодно функция была запрограммирована на выполнение.
Я не знаю, что это лучший способ сделать это, но у нас это работает.