c#sql防注入模糊查询_NET开发-在SQL Server数据库中,使用like结合通配符实现模糊查询...
1.概述在企业的.NET信息系统中,匹配查询和模糊查询使用频率是非常高的,像百度搜索使用的就是模糊查询,只要输入任意1个关键字,就可以查询出来所有与该关键字相关的信息。模糊查询例如,查询姓名为李小强的数据,则要使用姓名=李小强进行查询,这是相等查询。什么是模糊查询呢?模糊是指只匹配某一个字符或多个字符,然后中间或两边为任意字符,这就是模糊查询,如查询姓李的学生,则就是模糊查询。与之匹配的有李小强、
1.概述
在企业的.NET信息系统中,匹配查询和模糊查询使用频率是非常高的,像百度搜索使用的就是模糊查询,只要输入任意1个关键字,就可以查询出来所有与该关键字相关的信息。
模糊查询
例如,查询姓名为李小强的数据,则要使用姓名=李小强进行查询,这是相等查询。
什么是模糊查询呢?模糊是指只匹配某一个字符或多个字符,然后中间或两边为任意字符,这就是模糊查询,如查询姓李的学生,则就是模糊查询。与之匹配的有李小强、李大强、李小花、李一鸣等。
2.使用模糊查询
在SQL Server中,模糊查询要使用like在Where条件中进行查询。在搜索数据库中的数据时,SQL通配符可以替代一个或多个字符。SQL通配符必须与 LIKE运算符一起使用,LIKE是关键字。
SQL通配符有:%、_、[]和[^]。这3个通配符非常重要,一定要清楚每个通配符的代表的具体含义。
2.1. %通配符的使用
在SQL Server中,%通配符在SQL语句中表示任意的0或多个字符。
基本语法如下:
select * fr om 表名 where 字段名 like '%值%'
注意,在此SQL语句中,like关键字后面是带有单引号的匹配模式,其中包含了2个%通配符,表示在“值”左边和右边可以是任意的0个或多个字符。
例如:查询出BW_Student表中姓名中包含“一”的所有学生。
注意:当提到“包含”这2个字时,就表示模糊查询。
如下SQL语句:
SELECT TOP 1000 [Id],[Name],[Age],[Sex]FR OM [BW_TestDB].[dbo].[BW_Student]WHERE Name LIKE '%一%'
使用了’%一%’表示在一左边和右边可以有任意的0个或多个字符,都可以与之匹配。
运行结果如下:
like+%模糊查询
在这里使用了:WHERE Name LIKE ‘%一%’来实现模糊查询,LIKE左边是要进行模糊查询的字段名,右边是使用单引号括起来的模糊查询的表达式。
%通配符使用的最多,表示任意的0个或多个字符,边界值限制比较少,因此,广受.NET开发者喜欢。
2.2. _通配符的使用
在SQL Server中,_在SQL语句中表示任意的1个字符。
基本语法如下:
select * fr om 表名 where 字段名 like '_值_'
例如:查询出BW_Student表中所有年龄为20-29(包含20和29)的学生。如下SQL语句:
SELECT * FR OM BW_Student WHERE Age LIKE '2_'
运行结果如下:
like+_模糊查询
由于_可以表示任意的单个字符,所以’2_’表示所有以2开头且第2个字符为任意字符的字符串都符合要求。总体是匹配的是2个字符组成的字符串。
2.3. []通配符的使用
在SQL Server中,对于[]有两种使用方法:
1) []表示指定范围内。
2) [^]表示不在指定的范围内。
[]只匹配一个字符,并且这个字符必须是[]范围内的。
如:[0-9]表示匹配0-9之间的任意一个数字,[a-z]表示匹配a-z之间的任意字母。
例如:查询出年龄为20、21、22、23的学生
select * fr om BW_Student where Age like '2[0,1,2,3]'
或
select * fr om BW_Student where Age like '2[0-3]'
运行一下结果:
[]通配符
[^]通配符
在图3和图4中,分别使用了[]和[^]通配符来模糊查询Age列的值。运行后将匹配的结果显示出来。
2.4. 排序函数Row_Number()的使用
在SQL Server中,使用Row_Number()函数可以在查询的结果中,为每行数据添加一个行号,这个行号从1开始,常用于序号、排名等。
基本语法如下:
select ROW_NUMBER() over(order by 字段名desc/asc ) 别名,字段名1,字段名2,字段名n fr om 表名
例如:在BW_Student表中对年龄从大到小排列,并给出一个名次。SQL语句如下:
SELECT ROW_NUMBER() OVER(order by Age desc) 名次,* FR OM BW_Student
运行一下结果:
按序号排列
在图5中,查询的结果中多了一个“名次”列,该列就是一个名次列,是一个序号,注意,这个序号是临时的,并不真实存在数据库中。
在.NET应用程序的后台管理系统中,模糊查询是少不了的,这些通配符也是经常使用的,有的时候还会在C#业务逻辑中处理后,再通过ADO.NET技术发送给用户,这样用户得的结果更精准。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)