黑马程序员技术交流社区

标题: Sql防注入的一个问题(内有代码)???? [打印本页]

作者: 赵威    时间: 2013-4-29 16:39
标题: Sql防注入的一个问题(内有代码)????
            //第一步:定义一个连接字符串
            string connString = "data source=127.0.0.1;initial catalog=itcast;integrated security=true";
            //第二步:获取用户输入的用户名和密码
            string name = txtUId.Text.Trim();
            string pwd = txtPwd.Text.Trim();
            //第三步:定义一个连接变量conn
            using (SqlConnection conn = new SqlConnection(connString))
            {
                //第四步:定义一个Sql语句,将参数传进去
                string sql = "select COUNT(*) from tbluser where username =@username and userpwd =@userpwd";
                //第五步:定义一个操作数据库的变量cmd
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    try
                    {
                        //打开连接

                        conn.Open();
                        //首先,设置pname的类型
                        SqlParameter pname=new SqlParameter ("@username",SqlDbType .VarChar ,20);
                        pname .Value =name;
                        cmd.Parameters.Add(pname);

                        SqlParameter ppwd = new SqlParameter("@userpwd", SqlDbType.VarChar, 50);
                        ppwd.Value = pwd;
                        cmd.Parameters.Add(ppwd);
                        //第七步:开始执行
                        int row=Convert.ToInt32 (cmd.ExecuteScalar());
                        if (row > 0)
                        {
                            MessageBox.Show("登陆成功");
                        }
                        else
                        {
                            MessageBox.Show("用户名或密码错误");
                        }
                    }
                   catch (Exception ex)
                    {

                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }


上面cmd.Parameter.Add()方法和cmd.Parameter.AddWithValue()方法有什么区别?
看见网上很多的代码或者评论都是推荐用Add()方法,这是为什么?
其比AddWithValue()的优越性体现在哪里?
求高手解答



作者: 陈晖    时间: 2013-4-29 16:50
cmd.Parameter.Add()方法使用前需要先声明Parameter实例,
而cmd.Parameter.AddWithValue()方法使用直接将参数和替换值加上去即可。
前面的方法更有条理性,看上去不会太乱。:)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2