加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:56:15 所属栏目:MsSql教程 来源:网络整理
导读:我有一个应用程序,用户可以在其中输入sql查询作为文本,我需要在我的应用程序中针对C#DataTable / Dataset运行它.有可能吗? 编辑: 根据答案和一些更多的研究无法完成 – 无法将SQL查询应用于已经读入应用程序的表.查看可能的解决方法的答案. 编辑2: 我的最
我有一个应用程序,用户可以在其中输入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数据集.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读