Создание динамических запросов SQL в .net 2? - PullRequest
0 голосов
/ 28 июня 2011

Я мог бы заново изобрести колесо - но ..

Мне нужно позволить пользователю иметь возможность создавать «отчеты клиентов» из нашей базы данных - которые будут из графического интерфейса пользователя.

Они не могут иметь доступ к SQL, только список таблиц (групп данных) и столбцов в этих группах.

У них также есть возможность создавать предложения Where (критерии).

Я посмотрел вокруг Google - но ничего не всплыло.

Есть идеи?

Ответы [ 4 ]

0 голосов
/ 07 июля 2011

Спасибо за ответы!Мы закончили тем, что сделали это сами через коллекцию представлений!

Например:

  • Представление продаж
  • Представление клиента

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

Затем пользователь выбирает, какие столбцы они хотели бы видеть в каждом представлении, и мы выполняем соединение между представлениями вУровень кода.

Результирующий оператор очень мал, так как представления выводят из него большую часть работы.

0 голосов
/ 06 июля 2011

Как предвестник моего ответа, есть ряд дорогих продуктов, таких как Izenda (www.izenda.com), которые сделают это очень элегантно ...

Если вы хотите свернуть свое собственное (и поговорить с вашим вопросом), вы можете подделать это довольно быстро (и да, это плохо масштабируется до более чем 4 соединений), как это:

  1. Создайте оператор соединения, который охватывает все ваши таблицы, которые вы хотите использовать.
  2. Создайте словарь всех доступных полей, которые вы хотите предоставить пользователю, например: Dictionary = Dictionary <[Довольно отображаемое имя], [<strong> полностью определено Имя поля Sql]>

  3. Позвольте пользователю создать список выбора полей, которые он хочет видеть, и условия, которые он хочет добавить из словаря выше, и использовать значение словаря для объединения строки SQL, которая необходима для возврата его результатов.

(Я пропускаю довольно много работы по проверке того, чтобы убедиться, что пользователь не пытается неправильно ввести условие и тому подобное, но, по сути, смысл в том, что для небольшой коллекции таблиц вы можете создать статический оператор «from», а затем безопасно прикрепить к конкатетам «select» и «where», которые создает пользователь)

Обратите внимание, что я работал на некоторых системах, которые на самом деле сохраняли отношения таблицы и скомпилировали наиболее эффективный из возможных операторов "from" ... это не так уж и сложно, просто немного больше работы.

0 голосов
/ 06 июля 2011

I Настоятельно рекомендуем использовать существующий продукт, например Crystal Reports, Sql Server Report Builder или Infomaker. Просто легко получить что-то, что работает, но оставляет вас готовыми к атаке SQL-инъекцией.

Если вы все же продолжите, я рекомендую использовать отдельное соединение sql для этих отчетов. Это соединение должно иметь учетную запись пользователя, которая имеет только права на чтение в любом месте базы данных.

0 голосов
/ 30 июня 2011

Хорошо, моя рекомендация, у Developer express есть замечательный конструктор критериев конечного пользователя, вы можете использовать их.

существуют другие элементы управления для создания критериев конечных пользователей, например http://devtools.korzh.com/query-builder-net/

Я надеюсь, что вам поможет

оба вышеуказанных элемента управления абстрагируют слой доступа к данным, поэтому у ваших конечных пользователей не будет доступа для отправки прямого запроса к базе данных. Элементы управления строят только критерии и вашу работу по отправке запроса в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...