A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩俊 中级黑马   /  2012-11-19 12:55  /  1669 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

using(sqlCommand cmd=conn.CreateCommand())
{
   cmd.CommandText="select *from T_Users where username=@username";
   cmd.parameters.Add(new sqlparameter("username",txtusername.Text));

}
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));
怎么理解

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

5 个回复

倒序浏览
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));
cmd.parameters.Add这个方法是往该连接的控制台里添加参数变量,该方法需要一个sqlparameter对象.
所以要new sqlparameter("username",txtusername.Text)对象.

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
通过cmd.parameters.Add(new sqlparameter("username",txtusername.Text))来指定@UserName的值。 txtusername.Text是用户输入的用户名。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
using(sqlCommand cmd=conn.CreateCommand()) //用using管理sqlcommand,用连接字符串conn建立一个sqlcommand
{
   cmd.CommandText="select *from T_Users where username=@username"; //sqlcommand语句的内容为查询T_Users 表中username为@username参数的值
   cmd.parameters.Add(new sqlparameter("username",txtusername.Text));    //把txtusername的文本赋值给username参数

}
cmd.parameters.Add(new sqlparameter("username",txtusername.Text));

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
parameter的汉语意思是参数的意思,Add是添加的意思,new是新的,cmd.CommandText需要程序来执行一条SQL语句查询相关信息,我们不能盲目的直接把
txtusername.Text放在cmd.CommandText中,这样会很容易出现漏洞,所以聪明的人想出了一个办法,将一个参数@username放在cmd.CommandText中,然后再将txtusername.Text赋给参数,这样就可以避免出现漏洞了。然后加上楼上解释

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 杨深 于 2012-11-19 23:59 编辑

大家把上面的语句都解释得很清楚了。我就说一下sql注入的事吧。
定义:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
方法:注入的方法有很多。
比如把你写的
  1. cmd.CommandText="select *from T_Users where username=@username";
复制代码
改为:
  1. string.format(“select *from T_Users where username={0}”,txtName.text).
复制代码
粗略看过去,根据用户输入的名字查询T_Users相应信息,一般只能查到对应用户的单条信息,应该是没有问题的。
但如果用户在文本框输入的是'or 1=1
实际的Sql将会改变为select *from T_Users where username=’’  or 1=1 --’
由于--后的会被注释,实际的执行,应该是根据用户名=’’即空,或1=1(永远成立)获取信息。而这条语句肯定有返回结果,而且能查询到所有的用户信息,where形同虚设。也暴露了信息,不是你编写sql的初衷。


评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马