Sql Server 的参数化查询
为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷。当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然。远没有参数化查询来的安全和快捷。
今天刚好了解了一下关于Sql Server 参数化查询和拼接sql语句来执行查询的一点区别。
参数化查询与拼接sql语句查询相比主要有两点好处:
1、防止sql注入
2、 提高性能(复用查询计划)
首先我们来谈下参数化查询是如何防止sql注入的这个问题吧。
防注入例子:
拼接sql语句:
("select * from user where name={0}",username) 或者 ("select * from user where name="+username)
当 name传进来是一个'aa';Truncate Table user 的时候,这样会导致直接清除整个表数据
"select * from user where name='aa';Truncate Table user
我们使用参数化的时候:
("select * from user where name=@username",new {username=username})
这时候即使我们传进来的是'aa';Truncate Table user ,数据库端也会把这些当做字符串处理,执行的sql语句会变成
select * from user where name=''aa';Truncate Table user '
实际上把'aa';Truncate Table user 这个当做了name的值做查询条件了
以上就是一个简单的例子介绍关于参数化查询如何防止sql注入。
再看到底是如何提高性能的呢?
复用查询计划:
select * from AU_User where Id=
select * from AU_User where Id=
Sql Server在执行一条查询语句之前都对对它进行“编译 ”并生成“查询计划”,上面两条查询语句生成的查询计划就是两条不一样的查询计划,在下面这张图片当中我们可以去尝试下执行这两条sql语句
,结果显而易见会生成两条查询计划,Id后面所接的参数不一致。
然后我们再来看看使用参数化查询
select * from AU_User where Id=@Id
这样不管你传的参数是多少,执行编译生成的查询计划都是 select * from AU_User where Id=@Id,这样可以实现查询计划的复用,并不需要同一个查询去生成多个查询计划
完全可以节省其中生成查询计划的时间
欢迎大家扫描下方二维码,和我一起学习更多的知识
SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; //查询student ... SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指 ... 原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ... SQL Server数据库————连接查询和分组查询 分组查询 select 列from <表名> where …… group by 列 注意:跟order by一样group ... 在查询结果窗口中复制列标题似乎是一项简单的任务,但对于业余爱好者来说,这可能是一场噩梦. 没有可见的指令/链接/按钮,其中一个可以使用列标题单击和复制所选数据.让我们看看如何在SQL Server M ... SQL Server跨服务器查询的方法我们经常需要用到,下面就为您介绍两种SQL Server跨服务器查询的方法,如果您感兴趣的话,不妨一看. SQL Server跨服务器查询方法一:用OPENDAT ... SQL Server多条件查询的实现 SQL Server多条件查询我们经常会用到,下面就教您如何使用存储过程实现SQL Server多条件查询,希望对您学习SQL Server多条件查询方面有所帮助 ... 来源:传智播客 免费开发视频. 问题:根据书名或出版社或作者查询书籍信息. using System; using System.Collections.Generic问题; using Syste ... 参数化查询为什么能够防止SQL注入 http://netsecurity.51cto.com/art/201301/377209.htm OleDbDataAdapter Class http://m ... redis是一个使用较多的内存键值数据库,这儿的键是字符串类型的标识符,而值可以是字符串.散列.列表.集合和有序集合,也正是因为redis提供了较丰富的值的类型,能够满足不同的使用要求,而且redis ... ueditor是一个很好用的html编辑器,不仅提供了格式化编辑文本的功能,还提供了自动上传图片的功能,现在就使用该编辑器来实现博客文章的编辑功能.1. 使用ueditor过程中会请求一个后台js文件 ... 题目链接: TP 题解: 都是骗子233,我还以为是什么神奇的算法. 由于边权的范围很小,最小生成树和最大生成树之间的总和差不会太大,所以可以枚举边权和,再直接根据方差建最小生成树,每次更新答案即可. ... 1.询问框的使用 主要体现在删除等重要操作 让用户进行二次确认的场景 //询问框 layer.confirm('您是如何看待前端开发?', { btn: ['重要','奇葩'] //按钮 }, fun ... 使用python备份服务器的文件 #coding=utf- import os import os.path def copyFiles(sourceDir, targetDir): for file ... 一.正题前的唠叨 第一篇实战博客,阅读量1000+,第二篇,阅读量200+,两篇文章相差近5倍,这个差异真的令我很费劲,截止今天,我一直在思考为什么会有这么大的差距,是因为干货变少了,还是什么原因,一 ... 1.前提 在阅读这篇博客之前,希望你对HashMap已经是有所理解的,否则可以参考这篇博客: jdk1.8源码分析-hashMap:另外你对java的cas操作也是有一定了解的,因为在这个类中大量使用 ... 原文地址:https://www.cnblogs.com/lwqlun/p/10576443.html 作者:Lamond Lu 源代码:https://github.com/lamondlu/EFC ... 这几天在学着做购物网站,初步的完成了首页的框架吧,记录下.慢慢加强.主要难点,是样式的设置问题,如果自己想,自己摸索,可能会需要很长的调试.也是一个孰能生巧的过程吧,有些部分没有按照学习资料的方法也做 ... 我正打算写写 Python 的生成器,然而查资料时发现,引入生成器的 PEP 没人翻译过,因此就花了点时间翻译出来.如果在阅读时,你有读不懂的地方,不用怀疑,极有可能是我译得不到位.若出现这种情况,我 ...Sql Server 的参数化查询的更多相关文章
随机推荐