C# 动态组合SQL脚本LIKE语句及查询参数防SQL注入攻击
C# 动态组合SQL脚本LIKE语句及查询参数防SQL注入攻击
动态组合SQL脚本的多个LIKE条件,并要求传入SQL参数防止SQL注入攻击。 动态组合的SQL脚本: 参考代码1: C# Code: public DataTable Search(String DocType, String DeptID, String FileCaption, String DocKind) { //构建CommandHelper实例,用于动态创建参数对象 CommandHelper cmd = _Database.CreateCommand(""); StringBuilder sb = new StringBuilder(); sb.Append("SELECT * FROM dt_doc WHERE 1=1 "); if (!String.IsNullOrEmpty(DocType)) { sb.Append($" AND DocType LIKE {_Database.ParamSymboName}DocType");//拼接SQL参数 cmd.AddParam("DocType", "%" + DocType + "%");// 添加SQL参数对象,组合LIKE条件的值 } if (!String.IsNullOrEmpty(DeptID)) { sb.Append($" AND DeptID LIKE {_Database.ParamSymboName}DeptID"); cmd.AddParam("DeptID", "%" + DeptID + "%"); } if (!String.IsNullOrEmpty(FileCaption)) { sb.Append($" AND FileCaption LIKE {_Database.ParamSymboName}FileCaption"); cmd.AddParam("FileCaption", "%" + FileCaption + "%"); } //数字类型 if (!String.IsNullOrEmpty(DocKind)) { sb.Append($" AND DocKind = {_Database.ParamSymboName}DocKind"); cmd.AddParam("DocKind", DocKind); } sb.Append(" ORDER BY " + dt_Doc.__KeyName); //给DbCommand绑定SQL脚本 DbCommand command = cmd.Command; command.CommandText = sb.ToString(); //调用IDatabase底层组件的方法 return _Database.GetTable(command, dt_Doc.__TableName); } //来源:C/S框架网 | www.csframework.com | QQ:23404761 参考代码2: C# Code: public DataTable Search(string content) { string sql = "SELECT * FROM tb_MyUser "; CommandHelper cmd = _Database.CreateCommand(""); if (!string.IsNullOrEmpty(content)) { sql = sql + $" WHERE Account LIKE {_Database.ParamSymboName}Account OR UserName LIKE {_Database.ParamSymboName}UserName "; cmd.AddParam("Account", "%" + content + "%"); cmd.AddParam("UserName", "%" + content + "%"); } cmd.Command.CommandText = sql; DataTable dt = _Database.GetTable(cmd.Command, tb_MyUser.__TableName); return dt; } //来源:C/S框架网 | www.csframework.com | QQ:23404761 Like语法注意事项: 1. 使用参数化查询,参数的值不能带有单引号! SQL语句:SELECT * FROM Person WHERE Name LIKE @Name @Name参数传入的值:%小李%
2. 使用SQL拼接,参数的值必须要带单引号! SQL语句:SELECT * FROM Person WHERE Name LIKE '%小李%' 扫一扫加作者微信
参考文档:
[原创]C# Access 模糊查询SQL语句 SQL注入法攻击一日通 SQL注入攻击的原理及其防范措施 C# 检查字符串,防SQL注入攻击 C#实现SQL查询分析器(C# Visual SQL Query Designer) SQL2008多个查询条件分页查询脚本(原创) C#SQL注入攻击检查类SQLInjection C# 格式化CodeHighlighter生成的SQL脚本高亮着色源码(CSFramework.com原创) C# JsonSettings/JsonSerializerSettings参数设置类 C# 动态对象转换为实体对象支持泛型(DynamicToEntity) SQL使用LIKE查询模糊匹配多个特殊标点符号的数据 MSSQL 查询所有用户自定义存储过程和自定义函数 C#.NET 处理SQL特殊数据类型Geography/Geometry/Hierarchyid/XML C#.NET给DataTable日期类型的列赋值报错:所需类型是 MySqlDateTime,值类型与列类型不匹配 C#.NET 查询MYSQL报错:值类型与列类型不匹配不能在列中存储<0001-01-01 00:00:00>。所需类型是MySqlDateTime
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |