c# - 如何将 SQL 查询应用于 C# 数据表/数据集?

标签 c# sql datatable dataset

我有一个应用程序,用户可以在其中输入文本形式的 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/

相关文章:

R将时间序列中的重复行与数据表中的不同列类型进行组合

c# - 在 Windows Phone 7 上的 ShellTile 上解析 URI 参数

sql - 标识列与主键

node.js - 在NodeJS中使用带有大量数据的Datatable时搜索错误

mysql - 无法得到正确的结果: SQL Query Help Needed

php - 显示每个 id 的表内容

r - 按字母顺序对数据表进行排序,然后按 R 中的数字值排序

c# - MVC - 使用 AJAX 调用导致服务器端页面验证在按钮单击时触发

c# - 使用网络浏览器打印文档显示

c# - 从 Firebird 数据库表中检索最后一个 ID