请教专家:关于sql通过参数模糊查询的写法。

shengyongwang 2010-05-20 02:33:42
为了防止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";
但是这样写有问题,请教大家,这种情况你们都是怎么写的。
...全文
502 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
小_虎 2010-05-25
  • 打赏
  • 举报
回复
难道是我弄反 了?悲哉。

收藏下。。
shengyongwang 2010-05-25
  • 打赏
  • 举报
回复
问题已解决,结贴了。
shengyongwang 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 fcuandy 的回复:]
4,6楼正解, 2,5,8楼拼sql还需要用什么参数方式执行呢
[/Quote]
我也这样认为
fcuandy 2010-05-24
  • 打赏
  • 举报
回复
4,6楼正解, 2,5,8楼拼sql还需要用什么参数方式执行呢
cxmcxm 2010-05-24
  • 打赏
  • 举报
回复
用存储过程,直接在语句中设置参数,不用动态查询.
shengyongwang 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 a82344626 的回复:]

引用 11 楼 shengyongwang 的回复:
引用 2 楼 jxyxhz 的回复:

like '%'+ @name +'%'

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

不会这那样的
SqlParameter paramet……
[/Quote]
我已经试了第二次了。当我输入 测试' or 1=1 -- 的时候确实把所有的用户都查出来了。
shengyongwang 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzxap 的回复:]

快结贴。我快升了
[/Quote]
大哥的方法不错,结贴的时候会给你分数的,帮你快速升。
a82344626 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shengyongwang 的回复:]
引用 2 楼 jxyxhz 的回复:

like '%'+ @name +'%'

这种方法的实质其实和sql拼接是一样的,当我输入:管理员’or 1=1的时候,就可以把所有的查询出来。其实要不要后面的paramtete都没有关系。直接把@name当成name执行了。
[/Quote]
不会这那样的
SqlParameter parameter = new SqlParameter("@Name", name) ;
因为这个是参数了!
不信你可以自己测试下!
你上面的永远在
‘’里
a82344626 2010-05-20
  • 打赏
  • 举报
回复

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);
}

shengyongwang 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jxyxhz 的回复:]

like '%'+ @name +'%'
[/Quote]
这种方法的实质其实和sql拼接是一样的,当我输入:管理员’or 1=1的时候,就可以把所有的查询出来。其实要不要后面的paramtete都没有关系。直接把@name当成name执行了。
xiaogangqq123456 2010-05-20
  • 打赏
  • 举报
回复
5楼正解...
小_虎 2010-05-20
  • 打赏
  • 举报
回复
最好用我给你的方法,把%写在语句里面而不是赋参数,

我记得当初new SqlParameter("@name","%"+name+"%")会出意想不到的错误。
Ray_Yang 2010-05-20
  • 打赏
  • 举报
回复
注意过滤通配符
比如_ 等等 可以用[_]
zzxap 2010-05-20
  • 打赏
  • 举报
回复
快结贴。我快升了
a82344626 2010-05-20
  • 打赏
  • 举报
回复
new SqlParameter("@name","%"+name+"%")
zzxap 2010-05-20
  • 打赏
  • 举报
回复
String name ="as";    

String sql = "select * FROM tbl_table where Name like @Name ";

searchName = "%"+searchName+"%"; //不用单引号,传到sql语句会自动添加



SqlParameter parameter = new SqlParameter("@Name", name) ;
小_虎 2010-05-20
  • 打赏
  • 举报
回复
结贴给分。
小_虎 2010-05-20
  • 打赏
  • 举报
回复
like '%'+ @name +'%'

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧