最近写了很多方向的总结和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

c# 分析SQL语句中的表操作的更多相关文章

  1. sql语句中----删除表数据drop、truncate和delete的用法

    sql语句中----删除表数据drop.truncate和delete的用法 --drop drop table  tb   --tb表示数据表的名字,下同 删除内容和定义,释放空间.简单来说就是把整 ...

  2. SQL点滴2—重温sql语句中的join操作

    原文:SQL点滴2-重温sql语句中的join操作 1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,R ...

  3. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  4. 重温sql语句中的join操作

    1.join语句 Sql join语句用来合并两个或多个表中的记录.ANSI标准SQL语句中有四种JOIN:INNER,OUTER,LEFTER,RIGHT,一个表或视图也可以可以和它自身做JOIN操 ...

  5. sql语句中3表删除和3表查询

    好久没来咱们博客园了,主要近期在忙一些七七八八的杂事,包括打羽毛球比赛的准备和自己在学jqgrid的迷茫.先不扯这些没用的了,希望大家能记得小弟,小弟在此谢过大家了. 回归正题:(以下的sql是本人在 ...

  6. 【python】提取sql语句中的表名

    前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...

  7. sql语句中----删除表数据的"三兄弟"

    说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用得就比较少了 现在来介绍另外两个兄弟,都是删除表数据的,其实也是很容易理解的 老大- ...

  8. sql语句中----删除表数据drop、truncate和delete的用法(转)

    转载于:http://www.cr173.com/html/40708_1.html 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟 ...

  9. sql语句之连表操作

    内连接 select * from employee inner join department on employee.dep_id = department.id 左连接 在内连接的基础上保留左表 ...

随机推荐

  1. small zhishi

    \\192.168.1.201\d$\Data 访问远程计算机文件资源管理器

  2. POI Excel解析

    Maven 引入POI <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi&l ...

  3. 数组和矩阵(1)——Find the Duplicate Number

    Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), pro ...

  4. IT人的格言警句

    程序员困境:我们通过编码谋生,但环境却正在摧毁我们这种谋生的能力. 在技术日新月异的IT行业,“专家”这个词其实是个危险信号,意味着你的知识距离老化不远了.IT工程师应该经常更换工作领域,了解多个领域 ...

  5. spark学习地址

    http://blog.sina.com.cn/s/blog_64d9a6ef0101ghvs.html http://blog.sina.com.cn/s/blog_49cd89710102v3b1 ...

  6. 【Leetcode】【Easy】Valid Palindrome

    Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignori ...

  7. ORACLE_TRIGGER

    PL/SQL TRIGGER Statement PL/SQL TRIGGER  Statement The trigger statemet is a especially stored proce ...

  8. 如何在Kubernetes里给PostgreSQL创建secret

    创建一个initdb.sql文件,输入如下内容: -- This is a postgres initialization script for the postgres container. -- ...

  9. C语言 Printf函数

    #include <stdio.h> int main(int argc, const char * argv[]) { // insert code here... printf(&qu ...

  10. MHA 一主一从搭建

    安装基本环境介绍 一主一从     MHA manager & slave  node2 192.168.56.27 Master机器 node1 192.168.56.26 VIP   19 ...