SQL 格式化工具 V.1

最近在做公司的查询平台,要抓以前旧的SQL语句。用VS抓出来的语句经常是一些没有分段的一连串的SQL,复制到SQL SERVER 2008后还要自己分段,相当麻烦。于是就有了写一个简单的SQL格式化工具的想法。

我的实现思路很简单:

1 设置一个SQL语句每一段的长度值,超过这个长度值的时候就给他增加一个分段符。

代码:

public partial class Form1 : Form
    {
        //用于标记切割时的开始位置
        int stratNum=0;
        string temp;
        //设置格式化后每一段SQL语句的长度值
        int length = 40;
        StringBuilder sb;
        public Form1()
        {
            InitializeComponent();
        }

        private void btnFormat_Click(object sender, EventArgs e)
        {
            try
            {
                //字符长度
                label1.Text = Convert.ToString(tbSourceSql.Text.Length);
                sb = new StringBuilder();
                while (stratNum <= (tbSourceSql.Text.Length))
                {
                    //判断是否到最后一行
                    if ((tbSourceSql.Text.Length - stratNum) > length)
                    {
                        //判断结尾是否为空字符串或标点
                        temp = tbSourceSql.Text.Substring(stratNum, length);
                        // 如果不是以“ ”或“,”结尾,则重新截取
                        while(!(temp.EndsWith(" ") || temp.EndsWith(",")))
                        {
                            length++;
                            temp = tbSourceSql.Text.Substring(stratNum, length);
                        }
                        stratNum += length;
                    }
                    else
                    {
                        temp = tbSourceSql.Text.Substring(stratNum);
                        stratNum += length;
                    }
                    sb.Append(temp + Environment.NewLine);
                }
                tbFormatSql.Text = sb.ToString();
                MessageBox.Show("Format Success.");
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                stratNum = 0;
                sb = null;
            }
            
        }
    }

实现语句相当简单,但好像效果不是很好。因为有些会行会超出设置的长度。以后再细查原因。

效果:

需要分割的SQL语句:

SELECT distinct PLActorRight.*,PLMenuItem.PLMenuName,PLMenuItem.PLMenuStep,PLMenuItem.PLMenuValue,PLMenuItem.PLSystemID,PLMenuItem.PLAssemblyName,PLMenuItem.PLClassName,PLActorIDSystemID=PLMenuItem.PLSystemID*100000 + PLActorRight.PLActorID FROM PLActorRight LEFT JOIN PLMenuItem ON PLMenuItem.PLMenuID=PLActorRight.PLMenuID WHERE PLActorID IN (SELECT PLActorID FROM PLUserActor WHERE <<PLUserID ={0}>> AND PLActorRight.PLEnabledFlag=1 AND PLActorRight.PLShowFlag=1)

格式化后效果图:

 

2 设置几个SQL的关键字。遇到关键字就分段。

代码:

 public partial class Form1 : Form
    {
        //分割字段
        string[] keyString = new string[] { "FROM", "LEFT JOIN", "RIGHT JOIN", "INNER JOIN", "ORDER BY", "GROUP BY", "SELECT", "UNION ALL" };
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 给关键字加分割符
        /// </summary>
        /// <param name="oldString"></param>
        /// <returns></returns>
        private string[] GetNewString(string[] oldString)
        {
            string[] newString = new string[oldString.Length];
            for (int i = 0; i < newString.Length; i++)
            {
                newString[i] +=oldString[i]+ Environment.NewLine;
            }
            return newString;
        }


        private void btnFormat2_Click(object sender, EventArgs e)
        {
            string sourceSql = this.tbSourceSql.Text;
            string reString= ReplaceStrings(sourceSql, keyString, GetNewString(keyString));
            this.tbFormatSql.Text = reString.ToString();
        }

        private string ReplaceStrings(string str,string[] oldStrings,string[] newStrings)
        {
            //Length取数据长度较短的那个
            string reString = string.Empty;
            
            int length = oldStrings.Length > newStrings.Length ? newStrings.Length : oldStrings.Length;
            for (int i = 0; i < length; i++)
            {
                string tempString = string.Empty;
                //替换
                tempString = str.Replace(oldStrings[i], newStrings[i]);
                str = tempString;
            }
            return str;
        }
    }


同样的原SQL代码,分割后效果图:

两个都是很粗略的方法,要想做出格式很好的SQL语句,还有很多要做。比如方法2中最好加一个长度限定,要了一定长度后自动分割。以及自动维护分割的关键字等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 傀儡SQL注入批量扫描工具V6.0是一款用于自动化扫描网站漏洞的工具SQL注入是一种常见的Web应用程序漏洞,黑客可以通过在输入框中注入恶意的SQL代码来获取和修改数据库中的数据。傀儡SQL注入批量扫描工具能够帮助安全人员快速发现并修复这些漏洞。 V6.0版本相比之前的版本增加了许多新功能和改进。首先,它具有更强大的漏洞检测引擎,能够检测更多的SQL注入漏洞类型。其次,它采用了多线程扫描技术,能够在短时间内扫描大量的目标网站,大大提高了扫描效率。 此外,傀儡SQL注入批量扫描工具V6.0还提供了友好的用户界面,使得用户能够轻松地配置和使用工具。用户可以设置扫描目标、选择不同的扫描模式和参数,并对扫描结果进行详细的分析和报告。工具还支持将扫描结果导出为常见的报表格式,方便用户和开发团队进行漏洞修复和跟踪。 此外,工具还提供了一些高级功能,例如漏洞验证和漏洞利用,可以帮助安全研究人员更深入地了解和利用SQL注入漏洞。傀儡SQL注入批量扫描工具V6.0是一款功能强大、易于使用的工具,对于那些关注Web安全的人来说是一个必备的辅助工具。 总之,傀儡SQL注入批量扫描工具V6.0是一款用于自动化扫描SQL注入漏洞的工具,它具有强大的漏洞检测能力、高效的扫描速度和用户友好的界面。它能够帮助安全人员快速发现和修复网站中的漏洞,提高Web应用程序的安全性。 ### 回答2: 傀儡SQL注入批量扫描工具v6.0是一种用于检测和测试网络系统中存在的SQL注入漏洞的工具。它的主要功能是对目标网站进行自动化批量扫描,以发现系统是否容易受到SQL注入攻击。 工具基于傀儡SQL注入技术,使用算法自动分析并检测目标网站的漏洞。它通过发送特定的SQL注入字符和语句来模拟恶意攻击,从而遍历目标网站的数据库,寻找容易受到注入攻击的漏洞点。 傀儡SQL注入批量扫描工具v6.0具有以下特点: 1. 批量扫描:它可以同时对多个目标网站进行扫描,节省了人工逐个扫描的时间和精力。 2. 自动化:工具运行时,不需要用户手动操作,它会自动执行扫描任务,节省了人力资源。 3. 高效准确:工具使用先进的傀儡SQL注入技术,能够快速准确地检测出SQL注入漏洞,提高了漏洞检测的效率。 4. 报告生成:工具能够自动生成扫描报告,详细列出发现的漏洞和安全风险,帮助用户及时了解系统的安全状况。 5. 用户友好:工具界面简洁明了,操作简单易懂,即使是没有专业知识的用户也可以方便地使用。 总之,傀儡SQL注入批量扫描工具v6.0是一个功能强大、高效准确的网络安全工具,可以帮助用户发现和解决SQL注入漏洞,提高系统的安全性。 ### 回答3: 傀儡SQL注入批量扫描工具v6.0是一种软件程序,旨在通过自动化和批量化的方式帮助安全专业人员识别和检测网站上的傀儡SQL注入漏洞。傀儡SQL注入漏洞是一种常见的网络安全漏洞,攻击者可以通过该漏洞注入恶意的SQL代码到网站的数据库中,从而获取或破坏敏感信息。 v6.0版本的傀儡SQL注入批量扫描工具在前几个版本的基础上进行了改进和升级。该工具具有以下特点和功能: 1. 批量扫描:该工具可以同时扫描多个目标网站,大大提高了扫描效率和速度。用户只需提供目标网站的URL列表,工具会自动对这些网站进行扫描。 2. 傀儡SQL注入漏洞检测:该工具会主动探测网站中是否存在傀儡SQL注入漏洞。它会发送特定的SQL语句到目标网站的输入字段,然后分析返回的结果判断是否存在漏洞。 3. 恶意代码生成:该工具可以根据用户的配置和需求自动生成各种傀儡SQL注入的恶意代码。用户可以自定义注入的语句和参数,以满足不同的测试需求。 4. 报告生成:扫描工具会自动生成详细的扫描报告,列出所有扫描到的傀儡SQL注入漏洞。报告通常包括漏洞的位置、危害等级和修复建议,以帮助安全专业人员对漏洞进行评估和修复。 总之,傀儡SQL注入批量扫描工具v6.0是一款功能强大且易于使用的安全工具,可帮助用户快速识别和验证网站上的傀儡SQL注入漏洞,从而更好地保护网站和敏感信息的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值