当我们按照某个字段排序时,通常使用order by语句,如果该字段存在null值,则会把null值的这条放到最上面,

那我们是否有办法解决呢?

答案是肯定的:

ORDER BY CASE WHEN OrderNum IS NULL THEN 1 ELSE 0 END

这样的话,null值的这条就排队到了最后。

使用dapper查询数据时,有时候会用到模糊查询,像下面这样:

SELECT * FROM T_Test  WHERE Sex='男' AND (CardNo like 'xxx' OR Remark like 'xxx')

如果dapper里这么写:

public List<TestModel> Test(string sex, string keyWords){
var sb = new StringBuilder("SELECT * FROM T_Test WHERE 1=1 ");
sb.Append(" AND Sex=@Sex ");
sb.Append(" AND(Content LIKE '%"+ keyWords +"%' OR Remark LIKE '%"+ keyWords +"%')");
return DapperHelper.Query<TestModel>(sb.ToString(), new { Sex = sex}).ToList();
}

如果keyWords的参数写:%' or 1=1) --

生成的sql语句就是:

SELECT * FROM T_Test WHERE 1=1
AND Sex='男'
AND (Content LIKE '%%' or 1=1) --%' OR Remakr LIKE '%%')

那么恭喜你,他人将获取你所有的信息。

那我们该怎么处理呢?

那就是修改dapper方法

public List<TestModel> Test(string sex, string keyWords){
var sb = new StringBuilder("SELECT * FROM T_Test ");
sb.Append(" AND Sex=@Sex ");
sb.Append(" AND(Content LIKE @KeyWords OR Remark LIKE @KeyWords )");
return DapperHelper.Query<TestModel>(sb.ToString(), new { Sex = sex, KeyWords = '%' + keyWords + '%'}).ToList();
}

  生成的sql语句就是

exec sp_executesql N'SELECT * FROM T_Test WHERE 1=1 Sex=@Sex AND (Content LIKE @KeyWords OR Remark LIKE @KeyWords)',N'@KeyWords
nvarchar(4000)',@KeyWords=N'%%'' or 1=1) --%'

  即使是这样,数据也不会泄露了。

mssql server 排序 以及like语句的更多相关文章

  1. [干货来袭]MSSQL Server on Linux预览版安装教程(先帮大家踩坑)

    前言 昨天晚上微软爸爸开了全国开发者大会,会上的内容,我就不多说了,园子里面很多.. 我们唐总裁在今年曾今透漏过SQL Server love Linux,果不其然,这次开发者大会上就推出了MSSQL ...

  2. 利用脚本修改SQL SERVER排序规则

    利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l  今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...

  3. MS-SQL Server字符串处理函数大全

    MS-SQL Server字符串处理函数大全   select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.Index ...

  4. SQL Server 排序规则的影响

    目录 SQL Server 排序规则 影响 效果演示 更改数据库排序规则 服务器级排序规则 数据库级排序规则 列级排序规则 查询时指定规则 建议 使用 Unicode 数据类型 使用二进制排序规则 [ ...

  5. MSSQL Server数据库的四种连接方法和sql连接字符串

    MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...

  6. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...

  7. PowerDesigner反向数据库时遇到[Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句。SQLSTATE = 37错误解决方法

    逆向工程中,有时会出现如下错误 ... [Microsoft][ODBC SQL Server Driver][SQL Server]无法预定义语句 SQLSTATE = 37000 解决方案: 1. ...

  8. SQL Server Profiler监控执行语句

    SQL Server Profiler监控执行语句,这个功能主要用在实时的监控对数据库执行了什么操作,从而及时有效的跟踪系统的运行. 常规配置选项,名称.模板.保存到文件(可以复用). 事件选择,可以 ...

  9. mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法

    mssql server 2005还原数据库bak文件,网站使用虚拟主机建站会经常遇到,一般情况下,主机商有在线的管理程序,但有时候没有的话,就需要本地还原备份sql数据库了.这种情况mssql se ...

随机推荐

  1. ex3

    #include <stdio.h> int main() { char ch; printf("please input:\n"); scanf("%c&q ...

  2. [BUAA软工]Beta阶段测试报告

    Beta阶段测试报告 Bug发现与报告 BUG 出现原因 解决方案 将shell加上编辑器UI以后,两边显示的文件不同步 两边的根目录不一致 修改编辑器获取根目录的函数,使其与shell的/home目 ...

  3. sql server 使用链接服务器远程查询

    --PKselect * from sys.key_constraints where object_id = OBJECT_ID('TB')--FKselect * from sys.foreign ...

  4. js待学习

    异步原理 事件循环 任务队列

  5. JCR分区 | 中科院SCI期刊分区表

    LetPub查询系统,非常方便,分区影响因子都可以查询,还有投稿经验可以参考. SCI全称是Science Citation Index(科学引文索引) 科睿唯安JCR分区(Journal Citat ...

  6. 【C++】C++中的类模板

    基础的类模板 模板类的继承 内部声明定义普通模板函数和友元模板函数 内部声明友元模板函数+外部定义友元模板函数 声明和定义分别在不同的文件(模板函数.模板友元) C++中有一个重要特性,那就是模板类型 ...

  7. 【C#】使用C# 读取Http的Post数据

    private string Post(string num) { Encoding myEncoding = Encoding.GetEncoding("gb2312"); // ...

  8. idel上传代码到github时遇到的Push rejected: Push to origin/master was rejected

    1 没有权限 2 先pull之后,再push即可

  9. 【SpringBoot】SpringBoot配置与单元测试(二)

    SpringBoot项目创建参考[SpringBoot]SpringBoot快速入门(一) 本文介绍SpringBoot项目的POM文件.配置与单元测试 POM文件 1.SpringBoot的pom文 ...

  10. java自定义jar包让jemeter使用

    背景:可能在做定义化的要求上,jmeter原有的jar包,已经不能满足我们,就需要自己写一个方法,以下就是写入的一个模拟post的请求,在jmeter中使用的案例 一:写代码 1.代码中的有两个包,原 ...