ADO多条件模糊查询防字符串攻击

多条件组合查询使用字符串拼接TSQL语句来实现

 1 void Button1_Click(object sender, EventArgs e)
 2     {
 3         string text = "select *from car"; //最终TSQL语句
 4         string endtext = ""; //组合查询末尾部分
 5         int num = 0; //记录当前是第几条查询,为了区别前缀是Where还是and
 6         bool ok = false; //判断是否有填写查询
 7         Hashtable hs = new Hashtable(); //哈希表集合,为了对应Parameters的代位符数据
 8
 9         if (!String.IsNullOrEmpty(txt_ID.Text))//如果文本框的值不为空
10         {
11             endtext += "ids like @id"; //在语句末尾阶段拼接上相应的字符串
12
13             //这里注意!模糊查询的通配符需要在集合中拼接添加,不可以直接拼接在语句字符串中!!!
14             hs.Add("@id", "%" + txt_ID.Text + "%");
15
16             ok = true;
17             num++;
18         }
19         if (!string.IsNullOrEmpty(txt_Code.Text))
20         {
21             ok = true;
22             num++;
23             if (num > 1) //判断是否是第一次拼接查询条件,如果不是第一次,则前缀需要拼接and
24             {
25                 endtext += " and code like @code";
26             }
27             else
28             {
29                 endtext += "code like @code";
30             }
31             hs.Add("@code", "%" + txt_Code.Text + "%");
32         }
33
34         if (!string.IsNullOrEmpty(txt_Name.Text))
35         {
36             ok = true;
37             num++;
38             if (num > 1)
39             {
40                 endtext += " and name like @name";
41             }
42             else
43             {
44                 endtext += "name like @name";
45             }
46             hs.Add("@name", "%" + txt_Name.Text + "%");
47         }
48
49         if (ok)
50         {
51             text = text + " where " + endtext;//这里判断是否有查询条件,如果有就拼接好where
52         }
53
54         Label1.Text = text; //+ hs["@name"]; 显示查询语句以便于查看拼接结果
55         list = new CarData().Select(text, hs); //调用查询方法
56         Repeater1.DataSource = list; //数据指向
57         Repeater1.DataBind(); //数据绑定
58     }

数据访问类中哈希表集合数据导入Parameters集合的方法:

 1 public List<Car> Select(string text,Hashtable hs)
 2     {
 3         List<Car> list = new List<Car>();
 4         cmd.CommandText = text;
 5         cmd.Parameters.Clear();
 6         foreach (string s in hs.Keys) //遍历Keys
 7         {
 8             cmd.Parameters.Add(s,hs[s].ToString()); //将Keys和Values都添加进集合
 9         }
10
11         conn.Open();
12         SqlDataReader dr = cmd.ExecuteReader();
13         if (dr.HasRows)
14         {
15             while (dr.Read())
16             {
17                 Car c = new Car();
18                 c.Ids = Convert.ToInt32(dr["ids"]);
19                 c.Code = dr["code"].ToString();
20                 c.Name = dr["name"].ToString();
21                 c.Brand = dr["brand"].ToString();
22                 c.Time = Convert.ToDateTime(dr["time"]);
23                 c.Oil = Convert.ToDecimal(dr["oil"]);
24                 c.Powers = Convert.ToInt32(dr["powers"]);
25                 c.Exhaust = Convert.ToInt32(dr["exhaust"]);
26                 c.Price = Convert.ToDecimal(dr["price"]);
27
28                 list.Add(c);
29             }
30         }
31
32         conn.Close();
33         return list;
34     }

注意!!!

在TSQL语句拼接时,通配符需要加在Hashtable集合中,不可以直接拼接在字符串中,虽然不报错,但是无结果!!!

时间: 2024-12-19 07:52:24

ADO多条件模糊查询防字符串攻击的相关文章

完整修改查询、字符串攻击

完整修改查询: 输入要删除的用户名,提示有没有此条数据,如果有而后提示是否确定要删除 添加: using System.Data.SqlClient; 而后: namespace 完整修改查询_字符串攻击 { class Program { static void Main(string[] args) { bool has = false;//判断用输入的数据是否存在,true表示存在,false不存在 Console.Write("请输入要删除的用户名:"); string una

JSP+Servlet+javabean+oracle实现页面多条件模糊查询

之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写oracle,查了一下资料试了一下,把代码帖出来 oracle的数据源配置也不同: driverName=oracle.jdbc.driver.OracleDriver url=jdbc\:oracle\:thin\:@127.0.0.1\:1521\:orcl username=marketManag

用js实现表格多条件模糊查询,可兼容分页

需求如下: 实现姓名.职位.直属上级.用户类型四个条件模糊查询,查询到的结果分页展示. 实现逻辑: 定义两个数组,其中vm.nowallUserLists为原始数据.vm.nowallUserFilter为筛选后数据.最终循环vm.nowallUserFilter来渲染表格. 筛选前,将vm.nowallUserLists的值赋给vm.nowallUserFilter,表格渲染全部数据. 筛选时,先初始化vm.nowallUserFilter为空数组,将筛选得到的内容推到这个数组中.此时表格渲染

【转】SQL多条件模糊查询解决方案-存储过程

前言:   算法的基本特性在前几篇博客中已经做了详细的说明,经过不断的改进优化,到归仓的时候了,也就是说,该算法告一段落,不再更新. 作为最终的解决方案,简要的总结一下算法特性,以方便读者参阅. l 目的:主要用于多条件模糊匹配. l 贪婪特性:返回满足条件尽可能多的记录. l 权重特性:为关键词分配权重,代表关键词的重要性,在不破坏贪婪特性的前提下,返回权重高的记录. l 必要关键词指定特性:在不破坏贪婪特性和权重特性的前提下,返回的结果中必须包含指定的关键词. l 典型应用:问-答系统,例如

JSP+Servlet+javabean实现页面多条件模糊查询

需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标题关键字,点GO按扭 3.选择分类,再输入关键字,点GO按扭 我这里用了MVC分层模式来进行的,所以一步步讲解吧,上源码: 因为我一个class里写了很多不同的业务,所以帖代码只帖当前步 dao层: 1 //当前页显示的新闻信息pageNo 当前页码,pagePerCount是每页多少条数据 2 p

JSP+Servlet+javabean+mysql实现页面多条件模糊查询(转载)

需求: 一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式 ,以下以自己做的实例来说明一下实现方法: 需要实现的界面原型:要满足条件: 1.单选分类,点GO按扭 2.单独输入标题关键字,点GO按扭 3.选择分类,再输入关键字,点GO按扭 我这里用了MVC分层模式来进行的,所以一步步讲解吧,上源码: 因为我一个class里写了很多不同的业务,所以帖代码只帖当前步 dao层: 1 //当前页显示的新闻信息pageNo 当前页码,pagePerCount是每页多少条数据 2 p

java--sql模糊查询(字符串拆分与拼接)

package com.shangyu.utils; public class Test { public static void main(String[] args) { String str = "松江九亭"; StringBuffer sb = new StringBuffer(); for (int i = 0; i <str.length(); i++) { if(sb.toString() != null && sb.toString() !=&qu

ADO.NET 完整修改、删除、防字符串攻击

首先,我先把昨天所做的人事管理系统进行了优化,将其完善成为了一个更符合实际的系统.将修改及删除数据的数据库操作前面添加了一个查询语句,这样,在实际操作时,如果数据库中没有该条数据,则程序不会执行接下来的删除和修改操作,减少了程序的实际工作量.具体代码如下: 删除数据: while (true) { bool has = false; //提示用户需要操作的内容 Console.WriteLine("请输入要删除的用户名:"); string Uname = Console.ReadLi

实体类,数据访问类.字符串攻击.防攻击

程序分三层:界面层.业务逻辑层.数据访问层 这里主要操作的是数据访问层,数据访问层又分为: 1.实体类 2.数据访问类 存放位置:APP_Code文件中 一.实体类 最简单的封装把数据库的表名变成类的类名把数据库的每一个列,变为实体类中的成员变量和属性列名与属性名一致 有几行就有几个实体类 这是一个简单的实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namesp