当前位置:C++技术网 > 资讯 > 两种方式来执行数据库参数查询防止SQL注入

两种方式来执行数据库参数查询防止SQL注入

更新时间:2016-03-11 22:39:31浏览次数:1+次

在某个数据库中,新建一个数据表,设计如下:

而后新建一个C#的控制台应用程序,写代码:

Console.WriteLine("请输入用户名:");
            string username = Console.ReadLine();
            Console.WriteLine("请输入密码:");
            string password = Console.ReadLine();

            using (SqlConnection con = new SqlConnection("server=.;database=Study;user id=sa;password=123456789"))
            {
                con.Open();
                string cmdstr = "select * from T_User where Username=@username and Password=@password";
                SqlCommand cmd = new SqlCommand(cmdstr, con);

                /*//SqlParameter userparameter = new SqlParameter("username", username);
                //SqlParameter passwordparameter = new SqlParameter("password", password);

                //cmd.Parameters.Add(userparameter);
                //cmd.Parameters.Add(passwordparameter);
第一种方案*/

                cmd.Parameters.Add("@username", System.Data.SqlDbType.VarChar, 10).Value = username;
                cmd.Parameters.Add("@password", System.Data.SqlDbType.VarChar, 10).Value = password;//第二种方案

                object obj = cmd.ExecuteScalar();
                if (obj != null && obj != DBNull.Value)
                {
                    Console.WriteLine("登录成功!");
                }
                else
                {
                    Console.WriteLine("用户名或密码错误!");
                }
                con.Close();
            }
            Console.ReadLine();
        }
对于数据库查询执行与否我们可以参考《数据库执行函数ExecuteScalar返回值判断》。最后看看执行结果:

尽管第一种就能防止SQL注入,但是,第二种方案更好,因为第二种方案,不仅限制了输入的类型,甚至还有输入的长度。