我正在为一个客户端开发一个 Winforms C# 应用程序,它取代了他们旧的基于 MS Access 的解决方案。这是一个完整的重写,现在使用 SQL Server 作为其数据库。该软件现在处于开发的最后阶段。
他们刚刚要求的一件事是能够执行软件的 UI 当前可能不允许他们在需要时执行的自定义查询。
使用旧的 Access 解决方案,他们可以使用查询设计器创建自己的自定义查询。使用 winforms/Sql Server 解决方案,他们无法做到这一点。他们也不想自己编写 SQL。
谁能想到一个很好的解决这个问题的方法?也许是一个 Winforms 库,它允许用户创建业务对象图和“和|或”逻辑。或者其他一些允许他们自定义查询的 UI 类型,几乎就像他们在 Access 中可以做的一样(但可能更特定于域)。
更新
我已将 Yaqub 的答案标记为答案,因为这是最接近我当时正在寻找的答案。我最终为他们编写了一个自定义表单来生成他们的查询:
第二组中的“选择表...”组合框仅显示已添加到顶部列表框中的表。
因为数据库布局现在几乎是一成不变的,所以我编写了代码来智能地计算所需的任何连接。例如,如果他们在顶层组中添加两个间接相关的表,那么当它生成 SQL 时,它将添加任何必需的连接来关联这些表。如果数据库布局确实发生了变化,我可以很容易地在查询编辑器的代码中更改 FK 引用。
对于条件组,值控件(该组中的第 4 个控件)根据字段类型(文本框、数字上/下控件、日期选择器、复选框)而变化。
当他们单击“运行查询”时,他们会得到另一个带有显示结果的网格视图的表单。在该结果表单中,它们可以导出到制表符分隔的文件。
我已经给了他们第一个版本,到目前为止,他们似乎对此非常满意。
我不想走 Access 路线,因为这个新版本的软件的重点是将它们从 Access 中移开(嗯,不是重点,因为那里也有更多的功能)。保持对 Access 的依赖似乎是一个巨大的退步。这也意味着如果他们在 Access 中保存大量自定义查询,并且我曾经更改数据库架构,我很可能会破坏他们的查询。我不希望他们像那样访问数据库。在我看来,这是自找麻烦。唯一应该触及数据库的是新软件,以及我们所做的任何自动数据库备份——没有别的,尤其是用户!
在软件中执行此操作的另一个优点是我可以对查询结果进行后处理。例如,有相当多的数据分析算法在软件中运行,这些算法是用 .NET 代码编写的。所以我可以向这个界面添加字段,允许他们选择这些算法的结果。