zoukankan      html  css  js  c++  java
  • 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集合中,不可以直接拼接在字符串中,虽然不报错,但是无结果!!!

  • 相关阅读:
    Ios插件开发
    React-Native学习指南
    APP测试基本流程
    iOS开发-由浅至深学习block
    你真的会用UITableView嘛
    iOS系统右滑返回全局控制方案
    优化UITableViewCell高度计算的那些事
    UITableViewCell高度自适应探索--AutoLayout结合Frame
    UITableView优化技巧
    页面间跳转的性能优化(一)
  • 原文地址:https://www.cnblogs.com/xkkk/p/5595003.html
Copyright © 2011-2022 走看看