为了防止sql注入,一般在写sql的时候,不是用的字符串拼接,而是通过参数形式。如下:  public static DataSet GetSMSByName(string name)
        {
            string sql = "select * from table where name=@name order by schid desc";
            SqlParameter[] pa = new SqlParameter[]{
                new SqlParameter("@name",name)
            };
            return DBHelper.GetDataSet(sql, pa);
        }但是我想通过模糊查询,只要包含了name的就查询出来,不知道用上面这种形式该怎么写。我是这样写的:
  string sql = "select * from table where name like '%@name%' order by schid desc";
但是这样写有问题,请教大家,这种情况你们都是怎么写的。

解决方案 »

  1.   

    String name ="as";    String sql = "select * FROM tbl_table where Name like @Name ";    searchName = "%"+searchName+"%"; //不用单引号,传到sql语句会自动添加     SqlParameter  parameter = new SqlParameter("@Name", name) ;   
      

  2.   

       new SqlParameter("@name","%"+name+"%")
      

  3.   

    最好用我给你的方法,把%写在语句里面而不是赋参数,我记得当初new SqlParameter("@name","%"+name+"%")会出意想不到的错误。
      

  4.   

    这种方法的实质其实和sql拼接是一样的,当我输入:管理员’or 1=1的时候,就可以把所有的查询出来。其实要不要后面的paramtete都没有关系。直接把@name当成name执行了。
      

  5.   


     public static DataSet GetSMSByName(string name)
            {
                string sql = "select * from table where name like @name order by schid desc";
                SqlParameter[] pa = new SqlParameter[]{
                    new SqlParameter("@name","%"+name+"%")
                };
                return DBHelper.GetDataSet(sql, pa);
            }
      

  6.   

    不会这那样的
    SqlParameter  parameter = new SqlParameter("@Name", name) ;   
    因为这个是参数了!
    不信你可以自己测试下!
    你上面的永远在
    ‘’里
      

  7.   

    4,6楼正解, 2,5,8楼拼sql还需要用什么参数方式执行呢