在.net 2中构建动态SQL查询?

时间:2011-06-28 08:19:25

标签: c# sql .net-2.0 dynamic-sql

我可以重新发明轮子 - 但是......

我需要允许用户能够从我们的数据库构建“客户报告” - 这将来自GUI。

他们无法只访问SQL列表(数据组)和这些组中的列。

他们还可以创建Where子句(条件)。

我环顾了谷歌 - 但没有任何事情发生。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

我的建议,Developer Express有一些令人惊叹的最终用户标准构建器,你可以使用他们的。

还有其他控件可以创建最终用户标准,例如 http://devtools.korzh.com/query-builder-net/

我希望能帮到你

以上两个控件都抽象了数据访问层,因此您的最终用户无权访问直接查询数据库。控件只构建标准及其将查询发送到数据库的工作。

答案 1 :(得分:0)

作为我答案的先行者,有许多昂贵的产品,如Izenda(www.izenda.com),这将非常优雅地做到这一点......

如果你想自己动手(和你的问题说话),你可以很快地伪造它(是的,这不能很好地扩展到超过4个连接),如下所示:

  1. 创建一个包含您要使用的所有表的连接语句。
  2. 创建要向用户公开的所有可用字段的字典,例如:Dictionary = Dictionary< [Pretty displayable name],[完全限定 Sql字段名称]>

  3. 让用户构建一个他们想要查看的字段的选择列表以及他们想要从上面的字典添加的条件,并使用字典值将sql字符串连接在一起,这是返回结果所必需的。

  4. (我正在跳过相当多的验证工作,确保用户不会尝试错误输入条件等等,但基本上这一点是,对于一小部分表,您可以创建一个静态“从”语句然后安全地粘贴在用户构建的连续“选择”和“位置”上

    请注意,我已经开发了一些实际存储表关系的系统,并编写了最有效的“from”语句...这不是一个很大的延伸,这只是一个工作。

答案 2 :(得分:0)

强烈建议使用Crystal Reports,Sql Server Report Builder或Infomaker等现有产品。它只是 easy 来获得似乎有效的东西,但让你开始进行SQL注入攻击。

如果你继续,我建议为这些报告使用单独的sql连接。此连接应具有仅在数据库中的任何位置具有读取权限的用户帐户。

答案 3 :(得分:0)

感谢您的回答!我们最终通过一系列观点自己做到了这一点!

例如:

  • 销售视图
  • 客户视图

视图已经处理了表之间的大多数连接,并尽可能多地返回连接数据。

然后,用户可以从每个视图中选择他们想要查看的列,并在代码级别进行视图之间的连接。

结果语句非常小,因为视图占用了大部分工作。