Загрузка представлений SQL (динамически) в приложение WinForms

Я пишу приложение WinForms на C# с целью выбора из представлений с агрегированными данными на сервере SQL. Суть в том, чтобы генерировать диаграммы из представлений, используя пространство имен System.Windows.Forms.DataVisualization.Charting.

На данный момент я выбираю имена представлений в соответствующей базе данных и перечисляю их пользователю, предлагая им выбрать одно из них, а затем указываю, какие столбцы должны идти по какой оси. Моя проблема заключается в формулировании запроса для выбора соответствующего представления. Приложение будет использоваться только для внутреннего использования, поэтому, если честно, уязвимости при внедрении не являются большой проблемой, однако я не хочу динамически создавать строки запросов, так как понимаю, что это очень дурацкий способ работы.

Я изучил параметризованные запросы и хранимые процедуры, но они не позволят вам параметризировать имя таблицы (по понятным причинам, из того, что я могу сказать). Это оставляет меня с дилеммой. Я думаю, что я мог бы сделать хранимые процедуры для всех представлений, но это кажется неуклюжим решением. Есть ли способ лучше? Должен ли я переработать всю идею?

1 ответ

Вы можете сделать это, создав оператор SQL в своем коде, или создать хранимую процедуру, в которой вы можете передать имя представления и список столбцов, которые нужно выбрать. Из двух методов я бы предпочел второй. Кроме этого, сейчас я не могу придумать какой-либо другой способ сделать это. Однако вы можете сделать некоторые дополнительные вещи, чтобы предотвратить инъекцию:

  • Тщательная проверка ввода.

  • Создайте нового пользователя и дайте этому пользователю наименьшее количество привилегий. Просто SELECT привилегия на взгляды. Используйте этого пользователя для общения с базой данных.

Другие вопросы по тегам