Дизайнер запросов в приложении winforms

Я работаю над приложением Winforms С# для клиента, который заменяет их старое решение на базе MS Access. Он полностью переписывается и теперь использует SQL Server в качестве своей базы данных. Это программное обеспечение находится на завершающей стадии разработки.

Одна вещь, которую они только что запросили, - это возможность делать пользовательские запросы, которые пользовательский интерфейс программного обеспечения в настоящее время не позволяет им делать в то время, когда он им нужен.

С помощью своего старого решения Access они могут использовать конструктор запросов для создания собственных пользовательских запросов. С решением winforms/Sql Server они не могут этого сделать. Они также не хотят сами писать SQL.

Может ли кто-нибудь подумать о хорошем решении этой проблемы? Возможно, библиотека Winforms, которая позволяет пользователю создавать график бизнес-объектов и "и | или" логику. Или какой-либо другой тип пользовательского интерфейса, который позволяет им настраивать запросы, почти так же, как они могут делать в Access (но, возможно, больше для домена).

Update

Я заметил ответ Якуба как ответ, так как это ближе всего к тому, что я искал в то время. Я закончил, хотя писал для них специальную форму для генерации своих запросов:

enter image description here

В поле "Выбор таблицы..." во второй группе отображаются только те таблицы, которые были добавлены в верхний список.

Так как макет базы данных в значительной степени установлен в камне, я написал код, чтобы разумно рассчитать любые необходимые соединения. Например, если они добавляют две косвенно связанные таблицы в верхней группе, тогда, когда он генерирует SQL, он будет добавлять любые необходимые соединения для их связывания. Если макет базы данных изменился, я очень легко изменил ссылки FK в коде редактора запросов.

Для группы условий управление значением (4-е управление вниз в этой группе) изменяется в зависимости от типа поля (текстовое поле, числовое управление вверх/вниз, датпикер, флажок).

Когда они нажимают "Запустить запрос", они получают другую форму с gridview, отображающим результаты. В этой форме результатов они могут экспортироваться в файл с разделителями табуляции.

Я дал им первую версию этого, и пока они до сих пор довольны.

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

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

Ответ 1

Вы можете найти конструктор запросов Visual SQL. Это даст вам представление о том, как вы можете реализовать эту функциональность.

Этот инструмент можно использовать для проектирования SQL-запросов. Его интерфейс очень прост по сравнению с SQL Server Management Studio. Его ограничение заключается в том, что он использует строку подключения OLEDB. Вы можете скачать исходный код здесь.

EDIT:

EasyQuery.NET WinForms может быть опцией, но она не бесплатна.

Эта статья также может помочь вам.

Ответ 2

Один из традиционных "Microsoft" отвечает на это, чтобы позволить им продолжать использовать Access... указывать только на сервере SQL и просто позволить им создавать свои собственные запросы там.

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

Нет никакого стыда в прототипировании нового материала в Access, прежде чем вносить его в реальный код.

Ответ 3

Рассматривали ли вы использование SSRS-части SQL и предоставление им доступа к инструменту ReportBuilder? У этого есть достойный интерфейс для опытных пользователей. Если у вас есть первичные ключи и внешние ключи, установленные в базе данных, они будут распознавать эти отношения и помогать пользователю создавать запросы с несколькими таблицами. Инструмент можно загрузить непосредственно с веб-портала SSRS, вы можете интегрировать отчеты непосредственно в свое. Net-приложение с помощью элемента управления ReportViewer, или вы можете использовать простые HTTP-запросы, чтобы вернуть их в Excel, PDF и т.д.

Ответ 4

Я работал над подобным инструментом, в основном этот инструмент позволяет бизнес-пользователям создавать отчет в сетке данных путем перетаскивания на бизнес-представлениях. Мы создали представления поверх таблиц и поддерживаем метаданные, такие как отношения полей и т.д. Таблицы метаданных. Если таблицы имеют ссылочную целостность, тогда инструмент получает информацию из базы данных master сервера sql.

Мы получили помощь от этой утилиты, предоставленной на codeproject. Вы можете пройти через это базовое приложение, которое создает запрос sql путем перетаскивания, и вы можете изменить его в соответствии с вашими потребностями.

http://www.codeproject.com/Articles/43171/A-Visual-SQL-Query-Designer