首页 新闻 会员 周边 捐助

参数化查询sql

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-10-10 11:26

string.Format("select sum(amt)as amt from tb where order_no in ({0})", orders);

 

 

这里怎么写才对,orders是用逗号分隔的多个订单号字符串。

清海扬波的主页 清海扬波 | 小虾三级 | 园豆:825
提问于:2012-08-25 15:50
< >
分享
所有回答(4)
1

一个参数对应一个字段,一个字段只能存放一个值,类似in里面这种放多个值的不能用参数化查询。

要用的话,将in转换成or的形式才可以用 order_no=@p1 or order_no =@p2 ...

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-25 17:16
0

功能实现上说,你这个可以了啊

string.Format("select sum(amt)as amt from tb where order_no in ({0})", “1,2,3,4,5,6,7,8,9”);

这里得注意 开始或者结束的 ”,“  

注入攻击方面就。。

阿K&LiveCai | 园豆:514 (小虾三级) | 2012-08-25 17:33
0

首先,为了防止注入攻击,不推荐楼主这样来拼接sql语句.
建议:

string sqlStr="select sum(amt) as amt from tb where order_no in (@orders)";
SqlParameters[] pms=new SqlParameters[]{new SqlParameters("@orders",orders)};

希望能帮到你~!

西夏普砖家 | 园豆:183 (初学一级) | 2012-08-26 00:07

能解释一下第二句是什么意思么?

支持(0) 反对(0) 返回值X | 园豆:6 (初学一级) | 2014-04-19 16:23
0

 你的 string.Format("select sum(amt)as amt from tb where order_no in ({0})", orders); 里面的 sum(amt) 的 amt 的怎么替换掉的?

 其实攻击是可以避免的,自己过滤一下传入的参数就行了。

曹wl | 园豆:169 (初学一级) | 2012-08-27 11:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册