Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将SQL查询应用于C数据表/数据集?_C#_Sql_Datatable_Dataset - Fatal编程技术网

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

C# 如何将SQL查询应用于C数据表/数据集?,c#,sql,datatable,dataset,C#,Sql,Datatable,Dataset,我有一个应用程序,用户可以在其中以文本形式输入sql查询,我需要在我的应用程序中针对C DataTable/Dataset运行它。有可能吗 编辑: 基于这些答案,以及一些无法完成的进一步研究,没有办法对已经读入应用程序的表应用SQL查询。看看答案,寻找可能的解决办法 编辑2: 在我的案例中,最终的解决方案是使用ANTLR实现一个简单的解析器。它允许用户使用“AND”和“OR”关键字以及括号输入简单查询。ANTLR生成的类将其转换为一组指令,然后我可以使用这些指令查询C数据集 如果要在应用程序中对

我有一个应用程序,用户可以在其中以文本形式输入sql查询,我需要在我的应用程序中针对C DataTable/Dataset运行它。有可能吗

编辑: 基于这些答案,以及一些无法完成的进一步研究,没有办法对已经读入应用程序的表应用SQL查询。看看答案,寻找可能的解决办法

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

如果要在应用程序中对c datatable/dataset运行搜索字符串

可以在选择方法中使用过滤器表达式


myDataTable.SelectcolumnName1类似“%+value+%”

如果您的用户输入的不是最简单的select语句,那么您将很难做到这一点。我想,为您的项目编写一个完整的SQL解析器的成本可能会高得让人望而却步,但这正是您所说的

对于我们自己开发的ORM,我有一个类,它将基本上预定义的SQL查询转换为可以与DataTable.Select一起使用的内容,但是where子句是从SqlParameters生成的

可能的解决办法

也许您可以结合以下项目,以接近您的目标:

然后

我自己没有用过林克尔

其他一些想法

我相信你已经考虑过了,但是做这件事的困难可能意味着如果你缩小一点,有更好的方法。严格地说,使用未知查询查询缓存意味着您必须用所有可能的数据填充缓存,或者在提交查询时能够调用该数据。根据定义,这不能提供比直接查询源代码更好的性能,除非您在缓存过期之前充分访问了它,从而使其有价值。根据我的假设,对于一个特别的报告系统,我倾向于怀疑情况是否如此,并且我还担心它在除边缘情况外的任何情况下都不会优于数据库引擎


@JoshC还提到了Sqlite的一种可能性,还有SQL Server 2012 LocalDB可能符合要求,尽管它们肯定不是.net数据集。

实际上有一个简单的解决方案

将DataTable中的数据导出到SQLite内存数据库。 在SQLite内存中数据库上运行SQL。
是的,但那可能是个坏主意。什么阻止了sql注入?您看过SqlCommand和SqlDataAdapter类了吗?就您创建用于教程/教育目的的应用程序而言,这很好。另一方面,这将被认为是一种糟糕的编程实践。您可以使用entityframework,最后您将有学习一些ORM工具的经验。@Josh C。快速查看SqlCommand和SqlDataAdapter类给我的印象是,由于连接字符串,我只能将它们应用于数据库。如何将它们应用于驻留在C数据集中的C数据表,即它已经读入内存。@DarshanJoshi数据集/数据表存在于应用程序中,而不是实际的数据库中,并且是只读的,没有连接回实时数据库。同样,我不关心sql注入。我只想让用户以一种简单且高度可自定义的方式输入其搜索条件。是否要对dataset/datatable运行基于sql的查询?问题是,Select函数中的搜索字符串不是sql查询。我不能期望我的最终用户知道一些深奥的.NET语法,但我可以期望他们知道SQL语法。是否有任何方法可以将sql查询转换为可应用于C dataset的内容?@Eternal21如果您仅进行筛选,则可以将select向下修剪为where子句。如果基于SELECT隐藏/显示列,则可以从SELECT中解析列名称并相应地修改视图。当列名中间有空格时,此工作是否正常?请将方名称括在方括号内[]。对于显式筛选器,不必编写自己的SQL解析器正是我尝试查看.NET是否已经支持可以接受SQL查询的方法的原因。根据目前为止的答案,看起来不像是这样。