老师让我用c#写一个类似sql格式化的工具,想问下原理是什么,如果有源码更好。

问题描述

如题

解决方案

解决方案二:
没人吗?好急啊!!!!!!
解决方案三:
....说得也太含糊了点.....
解决方案四:
就是类似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的。。。

时间: 2024-09-03 13:53:55

老师让我用c#写一个类似sql格式化的工具,想问下原理是什么,如果有源码更好。的相关文章

在C#中想写一个类似C 语言中的while(1)一样的死循环,应写在什么位置啊?

问题描述 在C#中想写一个类似C语言中的while(1)一样的死循环,应写在什么位置啊?想实现的功能是在没有任何系统事件的情况时,来运行我的这段代码.我知道在可视化程序里有这个一段代码,但这段代码在哪里啊?谢谢 解决方案 解决方案二:死循环?while(true){}这就是解决方案三:while(true){}写在窗口加载时候,WINFOMLOAD解决方案四:while(true){//执行}解决方案五:while(true){//你的代码}解决方案六:我的想法是这样的,所以的点击,按钮事件都可

mongodb-spring data mongo使用@DBRef,怎么执行一个类似sql中的join操作

问题描述 spring data mongo使用@DBRef,怎么执行一个类似sql中的join操作 解决方案 假设我要获取title,name两个字段,我该如何操作?翻了很多资料没好方法,, 解决方案二: 我这么操作,会获得User的所有字段,怎么获取指定字段呢? 我的操作是下面这样: @Query(value="{}", fields="{'title':1, 'user':1}") List<Archive> search(); 结果: [{&qu

C程序写了一个简化的控制台的扫雷,想问下,怎么才能在每次运行时,动态随机埋雷?

问题描述 C程序写了一个简化的控制台的扫雷,想问下,怎么才能在每次运行时,动态随机埋雷? ```// Duplicate.cpp : Defines the entry point for the console application. // #include #include const int START_X = 27; const int START_Y = 13; const int MAX_X = 9; const int MAX_Y = 9; class Cube; void se

数据库-写网站使用pageObject模式,有几个问题想问下大家

问题描述 写网站使用pageObject模式,有几个问题想问下大家 写网站使用pageObject模式,想问下它可以实现把数据库里面的某个字段的所有制相加么? 例如数据库表里面有账户余额字段,可以实现把所有余额相加么?用的是spring Mvc框架.谢谢大神! 解决方案 先临时变量修改再写入 解决方案二: 使用sum方法就可以实现相加了.

怎么将spring 作为一个工程导入eclipse?我想读下源码

问题描述 怎么将spring 作为一个工程导入eclipse?我想读下源码 问题补充:qinglangee 写道 解决方案 用maven导,在eclipse安装m2eclipse插件,然后import exsit maven project,就ok了.解决方案二:直接下载 spring 源码 然后导入!!解决方案三:你把java文件解压出来,然后复制粘贴到src目录下,它们都只是普通的java文件而已,这样一定没问题解决方案四:那新建一个java工程,直接把源码塞到src目录下不就行了解决方案五

如何写一个类似vs c#这样的开发环境的一个ui编辑器, 高手请出招, 100分求

问题描述 想写一个UI编辑器,界面风格类似C#的编辑风格,请高手出点主义,给些参考意见. 解决方案 解决方案二: 解决方案三: 解决方案四:单纯的帮顶ps:现在对回复有限制了啊解决方案五: 解决方案六: 解决方案七:有一个开源项目sharpdevelop,很不错,建议看看解决方案八: 解决方案九:该回复于2008-06-26 08:34:38被版主删除解决方案十:ding!!!!!!!!!!

C# List中写出类似SQL的语句

从一个关系表中挑出一个我们需要的元素列表采用SQL语句是再容易不过的了,其实C#的List中也可以采用类似的方法,虽然List中集成了Select(), Where()等语句,不过如果你的判断规则较为复杂,或者想要看起来一目了然,以下的方法也是可行的: 首先假设你有一个类  代码如下 复制代码 public class People {     public string Name { get; set; }     public int Age { get; set; } }并且有一些初始化语

自己写一个防止SQL注入函数

函数 <%function sqlcheck(Str,errtype)if Instr(LCase(Str),"select ") > 0 or Instr(LCase(Str),"insert ") > 0 or Instr(LCase(Str),"delete ") > 0 or Instr(LCase(Str),"delete from ") > 0 or Instr(LCase(Str),

作为一个ASP。NET的菜鸟,想问下现在找工作好找吗?行情怎么样听比我毕业早的说.net不行了

问题描述 有木有专业人士来解答下 解决方案 解决方案二:肯定没java那么好找,但目前很多net公司也招不到人,反正看你能力解决方案三:竟然说.net药丸.大哥,您是听谁说的呢...C#性能接近C++开发效率远远超出C++高手玩C++是宝剑配英雄.菜鸟玩C++是宝剑配残疾人但99%的人都不是天才,所以C#是最好的选择,当硬件性能不再是瓶颈的时候(现在大部分应用场景下已经不是瓶颈了)开发效率便是首先要考虑的.C#目前在各个方面占有率都在提升中,参考unity3D90%的都在用C#进行编写解决方案四