问题描述
如题
解决方案
解决方案二:
没人吗?好急啊!!!!!!
解决方案三:
....说得也太含糊了点.....
解决方案四:
就是类似p/sql的那种格式化功能
解决方案五:
把关键字都大写,换色什么的?感觉是个麻烦的东西呢..要做的大概就是识别,更正2块吧..简单地写一写的话识别用contains,更正用replace就行了..不知道你具体要做到什么程度了..
解决方案六:
引用4楼tinydyw的回复:
把关键字都大写,换色什么的?感觉是个麻烦的东西呢..要做的大概就是识别,更正2块吧..简单地写一写的话识别用contains,更正用replace就行了..不知道你具体要做到什么程度了..
不需要其他功能只需要将一大串sql语句输入,然后可以输出成整洁规整的sql就行
解决方案七:
这个有些复杂了...主要思路就是遇见特定的符号或者字符串就进行一定的处理,比如遇见逗号就换行,from顶格并且后面空出一定空间什么的...我所想到的就是首先将字符串根据select,from,where等关键字分割开,这里应该是用正则实现,然后保存为数组,数组再根据起始的关键字和对应的符号或字符串分割,比如select就用逗号分割,from就根据left/rightjoin和on,where就根据and,这样...你需要先理解格式化的规则....整理清楚逻辑再到程序里实现...
解决方案八:
这个很简单SQL指令是由保留字和其他字符串构成的,而作为子句的保留字也就那么几个如果要问原理,那就是语法分析。《编译原理》中都有
解决方案九:
引用7楼xuzuning的回复:
这个很简单SQL指令是由保留字和其他字符串构成的,而作为子句的保留字也就那么几个如果要问原理,那就是语法分析。《编译原理》中都有
如何用c#代码实现呢?这个是最难的吧
解决方案十:
是的,代码较多网上有很多C#写成的编译器。都是学习《编译原理》时的习作
解决方案十一:
protectedvoidButton1_Click(objectsender,EventArgse){stringsql=TextBox1.Text;if(TextBox1.Text==""){Response.Write("<script>alert('请输入sql内容!')</script>");}string[]sArray=sql.Split(newstring[]{",","from","inner","join","where","group"},StringSplitOptions.RemoveEmptyEntries);Response.ContentType="textml";//textmltext/xml//context.Response.Write("123456");SqlDataReadersdr=SqlHelper.ExecuteReader(sql);StringBuildersb=newStringBuilder();sb.Append("<table>");sb.Append("<tr><th></th><th></th><th></th></tr>");while(sdr.Read()){sb.AppendFormat("<tr><td>{0}</td><br><td>{1}</td><br><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td></tr><td>{}</td>",sdr["stuid"].ToString(),sdr["name"].ToString(),sdr["sex"].ToString());}sb.Append("</table>");sdr.Close();Context.Response.Write(sb.ToString());Context.Response.End();}写了这么多,不知道该怎么写了
解决方案十二:
参考notepad++代码
解决方案十三:
简单点字符串处理复杂点《编译原理》如果真要做好估计你们老师都搞不定因为要做好的话并不那么简单而他却叫连怎么下手都不知道的你做说明他并不觉得这个东西很复杂如果当作字符串处理用正则匹配处理简单语句到无所谓如果是复杂语句还嵌套查询什么的还有什么存储过程之内的估计也够你玩了而且一个不小心很出现很多bug在比如如果用户输入的sql语句本来就不合法怎么办?下面是一个不靠谱的例子比如一个简单的查询selects+(?<列部分>.*?)s+froms+(?<表部分>.*?)(swheres+(?<条件部分>.*?))?;//将关键部分匹配出来然后console.writeline("select");//逗号才分列然后以换行和tab合并才分结果console.writeline("t"+string.join(",rnt",列部分.split(',')));console.writeline("from");...
总之用正则的方式去处理够你玩了如果有下面的一条语句select*fromtb_testwherexxx='select*fromxxxwherexxx'
还是去看编译原理吧。。。
解决方案十四:
看一本讲C#的书吧,然后,里面讲数据库的那段。数据库操作语句都写在类似commandtext里面,你改成删除数据的语句应该就好了。如果要做成界面,可以把这些都写到button里面吧。(我理解的格式化,就是数据清除。。。)
解决方案十五:
引用10楼qq_34818107的回复:
protectedvoidButton1_Click(objectsender,EventArgse){stringsql=TextBox1.Text;if(TextBox1.Text==""){Response.Write("<script>alert('请输入sql内容!')</script>");}string[]sArray=sql.Split(newstring[]{",","from","inner","join","where","group"},StringSplitOptions.RemoveEmptyEntries);Response.ContentType="textml";//textmltext/xml//context.Response.Write("123456");SqlDataReadersdr=SqlHelper.ExecuteReader(sql);StringBuildersb=newStringBuilder();sb.Append("<table>");sb.Append("<tr><th></th><th></th><th></th></tr>");while(sdr.Read()){sb.AppendFormat("<tr><td>{0}</td><br><td>{1}</td><br><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td></tr><td>{}</td>",sdr["stuid"].ToString(),sdr["name"].ToString(),sdr["sex"].ToString());}sb.Append("</table>");sdr.Close();Context.Response.Write(sb.ToString());Context.Response.End();}写了这么多,不知道该怎么写了
这个好像ASP.NET的。。。