c# 分析SQL语句中的表操作

最近写了很多方向的总结和demo.基本包含了工作中的很多方面,毕竟c#已经高度封装并且提供了很多类库。前面已经总结了博文。最近2天突然感觉前面的SQL分析阻组件的确麻烦,也注意看了下。为了方便大家学习交流。自己专门另外写了一个组件demo.用正则表达式获取操作类型,其实原理很简单,我简单介绍下,算是为大家提供一个思路或者说解决方案。

   SQL92是固定格式,每部分内容都是用空格隔离,所以拿到SQL语句后,先用正则表达式规整SQL,连续的空格都用一个空格替换。然后按照SQL关键字从左向右依次解析关键字用正则表达式,处理完成后就是按照关键字的一个链表。这样由前面的关键字,再找到紧跟着的表,就是对表的操作了。

例如:SQL语句 select  *  from  m,这个语句,逐个获取空格,然后检查当前是否是关键字,不是则统一归为字段。那么from后面紧跟着的字段就是表。这样就获取了表操作。

简单测试了几个SQl语句,都可以实现,当然肯定不是完整的,如果按照这个思路来解决问题需要修改什么呢?

1.SQL关键词(select,insert,into等等),这个是在TagFactory类中的关键词数组,持续增加关键字,每一个关键字都算一个tag.

2.处理完SQL语句形成链表后,按照链表顺序逐个整理表操作,没有表内容则舍弃(因为是子句)。主要是TagList类的GetTags方法,其实就是查看当前是关键词是否是表操作类型的关键词(TagType中定义表操作类型的关键词),最后就形成了对表操作的归类。

示例:

         string sql = "truncate table m";
            SqlPaser.SqlPaser paser = new SqlPaser.SqlPaser();
            paser.Paser(sql);
            var v=  paser.Permission;//表操作

写的demo已经上传GIT

项目地址:

https://github.com/jinyuttt/SQLPaser.git

注意与前面的组件地址很近,少了一个字母r。

我最近所有的c#组件demo都是vs2017完成的。

这样就有表权限了。

最近的c#方向的学习和demo到此就基本完了,欢迎大家交流讨论。QQ群:158351344

 

 

 

posted @ 2018-11-14 00:44  IT苦行僧  阅读(616)  评论(0编辑  收藏  举报