我有一个应用程序,用户可以在其中输入文本形式的 sql 查询,我需要针对应用程序中的 C# DataTable/Dataset 运行它。可以吗?
编辑: 根据答案和一些更多的研究,它无法完成 - 无法将 SQL 查询应用于您已经读入应用程序的表。查看可能的解决方法的答案。
编辑 2: 在我的案例中,最终的解决方案是使用 ANTLR 实现一个简单的解析器。它允许用户使用“AND”和“OR”关键字以及括号输入简单的查询。 ANTLR 生成的类会将其转换为一组指令,然后我可以使用这些指令来查询 C# 数据集。
最佳答案
如果您的用户输入的不是最简单的选择语句,您将很难做到这一点。我想为您的项目编写一个完整的 SQL 解析器的成本会高得令人望而却步,但这实际上就是您所说的。
对于我们拥有的本地 ORM,我有一个类,它基本上将预定义的 SQL 查询转换为可以与 DataTable.Select
一起使用的东西,但是 where 子句是从SQL 参数。
可能的解决方案
也许您可以结合以下项目来接近您所追求的目标:
Linqer (SQL to LINQ converter)然后 LINQ to DataSet
我自己没有用过 Linqer。
一些其他的想法
我相信您已经考虑过了,但这样做的难度可能意味着如果您缩小一点,会有更好的方法。严格来说,使用未知查询查询缓存意味着您必须用所有可能的数据填充缓存,或者能够在提交查询时调用该数据。根据定义,这无法提供比直接查询源更好的性能,除非您在缓存过时之前充分访问缓存以使其值得。对于临时报告系统(我的假设),我倾向于怀疑情况是否如此,而且我也担心它在边缘情况下不会优于数据库引擎。
@JoshC 还提到了 Sqlite 的可能性,还有 SQL Server 2012 LocalDB 可能符合要求,尽管这些肯定不是 .net 数据集。
关于c# - 如何将 SQL 查询应用于 C# 数据表/数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12513853/