Адриано предоставил очень хорошую ссылку.Конечно, необходимо прочитать.Но я вижу одну вещь.При создании логических слоев в приложении каждый слой не знает о внутренней работе тех, кто находится под ним.Например, уровень представления не имеет представления о том, как уровень данных получает данные, это просто волшебство.Причина этого в том, что если вы решите не использовать SqlClient и выбрали другую технологию.Теперь, используя «Сокрытие технологий» со слоями, вы можете легко это изменить.
Итак, учитывая, что у вас есть, я предполагаю, что DataTable находится на уровне представления (или приложения).И, если это правда, ваш вызов метода DAC не должен показывать ничего, связанного с тем, что или как он извлекает данные.В вашем случае это правило нарушается параметром SqlParameter.Возможно, вы могли бы передать строки или INT.Например:
public DataTable Dac.GetPage(int pageId, int id)
Тем не менее, удачи.Я рад видеть тех, кто хочет учиться, и тех, кто хочет учить.