在某个数据库中,新建一个数据表,设计如下:
而后新建一个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注入,但是,第二种方案更好,因为第二种方案,不仅限制了输入的类型,甚至还有输入的长度。