C# sql语句拼接时 like情况的防sql注入的用法

  今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办。

  我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办。我想了下,这确实是个问题。

  刚在网上找了下相关的说明,原来是这样写的。

  如这样一个sql语句:

  

select * from game where gamename like ‘%张三%‘

  用c#表示的话:

            string keywords = "张三";
            StringBuilder strSql=new StringBuilder();
            strSql.Append("select * from game where gamename like @keywords");

            SqlParameter[] parameters=new SqlParameter[]
            {
                new SqlParameter("@keywords","%"+keywords+"%"),
            };

这里虽然采用了仍然是用% 来写,但是可以有效过滤sql注入的情况,还是挺简单实用。

是个小知识点,希望对你能有所帮助! ^_^

时间: 2024-10-06 09:29:27

C# sql语句拼接时 like情况的防sql注入的用法的相关文章

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法)

hiberante对象方式的投影操作与sql语句的投影方式(聚集函数的hibernate用法) 最近用到了hibernate的投影,写日记出来记录一下. (⊙o⊙)… 前提:搭配好hibernate环境了. myclass指的是已经映射好的实体类 如下3个函数是我写来测试投影的方法:   此三个方法我写在basedao中(基础dao类,做常用dao操作) 1 /** 2 * 斌临城下增加! 3 * <p/> 4 * ---(⊙o⊙)… 5 * <p/> 6 * * 7 */ 8 p

oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量

-如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAREA本视图持续跟踪所有shared pool中的共享cursor,--在shared pool中的每一条SQL语句都对应一列.本视图在分析SQL语句资源使用方面非常重要./***1.查看消耗资源最多的SQL:SELECT hash_value, executions, buffer_gets, di

为什么SQL语句Where 1=1 and在SQL Server中不影响性能

    最近一个朋友和我探讨关于Where 1=1 and这种形式的语句会不会影响性能.最后结论是不影响.     虽然结论正确,但对问题的认识却远远没有解决问题的根本.实际上在T-SQL语句的书写过程中经常犯得错误就是得出一个很窄的结论,然后教条式的奉若圣经,对于T-SQL领域来说,在网上经常可以看到所谓的优化守则,随便在网上搜了一些摘录如下: 不要有超过5个以上的表连接(JOIN) 考虑使用临时表或表变量存放中间结果 少用子查询 视图嵌套不要过深,一般视图嵌套不要超过2个为宜. 对出现在wh

[转]sql语句中出现笛卡尔乘积 SQL查询入门篇

本篇文章中,主要说明SQL中的各种连接以及使用范围,以及更进一步的解释关系代数法和关系演算法对在同一条查询的不同思路. 多表连接简介 在关系数据库中,一个查询往往会涉及多个表,因为很少有数据库只有一个表,而如果大多查询只涉及到一个表的,那么那个表也往往低于第三范式,存在大量冗余和异常. 因此,连接(Join)就是一种把多个表连接成一个表的重要手段. 比如简单两个表连接学生表(Student)和班级(Class)表,如图: 进行连接后如图: 笛卡尔积 笛卡尔积在SQL中的实现方式既是交叉连接(Cr

如何通过sql语句快速生成 删除表的sql

select 'drop table '+name tablename from sysobjects where xtype='U' and name like 'ta_bsk%' 备注: 从系统表(sysobjects)中查询类型是用户表(xtype='U')表名以ta_bsk开头的表名(name like '%ta_bsk%'),拼接上'drop table'就生成了我想要的sql语句了.哈哈

应用Druid监控SQL语句的执行情况

Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource. Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验. 同时Druid不仅仅是一个数据库连接池,它包括四个部分:Druid是一个JDBC组件,它包括三个部分: 基于Filter-Chain模式的插件体系. DruidDataSource

应用Druid监控SQL语句的执行情况(转)

Druid是什么? Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource. Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验. 同时Druid不仅仅是一个数据库连接池,它包括四个部分:Druid是一个JDBC组件,它包括三个部分: 基于Filter-Chain模式的插件体系. DruidDataSource

sql语句EXISTS的用法和oracle中substr的用法

转需:EXISTS 指定一个子查询,检测 行 的存在. 语法: EXISTS subquery参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字).结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE . NOT EXISTS 的作用与 EXISTS 正好相反 EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值. EXISTS内部有一个子查询语句(SELECT ... FROM.

在使用sql语句的一些注意事项(sql语句)

①如果插入字段包含对应的表的所有字段,并且是按照表中字段顺讯书写的,则可以用如下格式: String sql = "insert into tb_user values(?,?,?,?,?,?)"; ②如果插入字段只是包含表中字段的一部分(不含全部),则必须书写成如下格式: String sql = "insert into tb_user set uid=?,username=?,password=?,email=?,code=?"; 注意:在①的情况下可以用②的