微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将SQL查询应用于C#DataTable / Dataset?

我有一个应用程序,用户可以在其中输入SQL查询作为文本,我需要在我的应用程序中针对C#DataTable / Dataset运行它.有可能吗?

编辑:
根据答案和一些更多的研究无法完成 – 无法将SQL查询应用于已经读入应用程序的表.查看可能的解决方法的答案.

编辑2:
我的最终解决方案是使用ANTLR实现一个简单的解析器.它允许用户使用“AND”和“OR”关键字以及括号输入简单查询. ANTLR生成的类会将其转换为一组指令,然后我可以使用它来查询C#数据集.

解决方法

如果您的用户将输入除最简单的选择语句之外的任何内容,那么您将很难做到这一点.我想你的项目为sql编写一个完整的解析器是非常昂贵的,但这基本上就是你所说的.

对于我们拥有的本土ORM,我有一个类,它将基本上预定义的SQL查询转换为可以与DataTable.Select一起使用的东西,但是where子句是从sqlParameters生成的.

可能解决方

也许你可以结合以下项目来接近你所追求的目标:

Linqer (SQL to LINQ converter)然后LINQ to DataSet

我自己没有使用过Linqer.

其他一些想法

我相信你一直在考虑这个问题,但这样做的难度可能意味着如果你缩小一点就有更好的方法.严格地说,使用未知查询查询缓存意味着您必须使用所有可能的数据填充缓存,或者能够在提交查询调用该数据.根据定义,这不能提供比直接查询源更好的性能,除非你在过时之前足够多地访问缓存以使其变得有价值.对于一个特殊的报告系统(我的假设),我倾向于怀疑是这种情况,我也担心它不会比任何边缘情况都要优于数据库引擎.

@JoshC还提到了sqlite的可能性,并且还有sql Server 2012 LocalDB可能符合要求,尽管这些肯定不是.net数据集.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐