SQL参数化

避免SQL注入的方法有两种:
一是所有的SQL语句都存放在存储过程中,这样不但可以避免SQL注入,还能提高一些性能,并且存储过程可以由专门的数据库管理员(DBA)编写和集中管理,不过这种做法有时候针对相同的几个表有不同条件的查询,SQL语句可能不同,这样就会编写大量的存储过程,所以有人提出了第二种方案:参数化SQL语句。例如我们在本篇中创建的表UserInfo中查找所有女性用户,那么通常情况下我们的SQL语句可能是这样:

参数化:

优点:不用关心语句的单引号的问题了
,令外可以有效的防止SQL注入的非法入侵,这样写程序在编译的时候就把那语句编译了,不会与其它字符匹配了,这就是防止SQL注入的问题了,

唯一的缺点就是占用系统资源的问题了,因为它是早被预编译好的东西,所以系统在调用的时候是直接使用的,不需要再次进行对SQL语句进行编译了,如果项目小的话,少量的这样的代码可以不用计较资源的问题了

 

1

select * from UserInfo where sex=0

在参数化SQL语句中我们将数值以参数化的形式提供,对于上面的查询,我们用参数化SQL语句表示为: 

1

select * from UserInfo where sex=@sex

再对代码中对这个SQL语句中的参数进行赋值,假如我们要查找UserInfo表中所有年龄大于30岁的男性用户,这个参数化SQL语句可以这么写:

1

select * from UserInfo where sex=@sex and age>@age

//实例化Connection对象

SqlConnection connection = new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''");

//实例化Command对象

SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);

//第一种添加查询参数的例子

command.Parameters.AddWithValue("@sex", true);

//第二种添加查询参数的例子

SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表里age字段是int类型的

parameter.Value = 30;

command.Parameters.Add(parameter);//添加参数

//实例化DataAdapter

SqlDataAdapter adapter = new SqlDataAdapter(command);

DataTable data = new DataTable();

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server参数化查询是一种使用参数作为查询条件的技术,可以提高查询的安全性和性能。相比于拼接SQL语句,参数化查询可以防止SQL注入攻击,并且能够重复使用已经编译好的查询计划,从而提高查询的执行效率。 在参数化查询中,可以使用参数占位符(例如@parameter)来代替具体的参数值。这样可以将参数值与查询分离,使查询具有更好的可读性和维护性。 使用参数化查询的好处之一是可以防止SQL注入攻击。当使用拼接SQL语句时,如果用户的输入未经过正确的处理和验证,恶意的用户可能会在输入中注入恶意的SQL代码,导致数据库被攻击和破坏。而使用参数化查询,参数值会被正确地转义和处理,从而保证了查询的安全性。 此外,参数化查询还可以提高查询的性能。当使用参数化查询时,数据库会对查询进行编译,并生成一个查询计划。这个查询计划可以被重复使用,避免了每次查询都需要重新编译的开销,从而提高了查询的执行效率。 总结来说,SQL Server参数化查询是一种安全、高效的查询方式,可以提高查询的安全性和性能。通过将参数值与查询分离,参数化查询可以防止SQL注入攻击,并且可以重复使用已编译好的查询计划,提高查询的执行效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值