采用参数化法查询数据库防止注入
参数化的意义在于把对应的值从参数中提供,对于like语句,like后面的值则包括了单引号中的所有部分,包括百分号(%),因此在参数化like对应的值时,应该把百分号移到参数值中提供,像这样:
Cmd.Parameters[“@KeyWord”].Value = “%” + StrKeyWord + “%”;
可别奢想在sql语句中像这样的样子:
Select * From [TableName] Where [Column1] like \’%@KeyWord%\’
不会报错,不过你不可能查询到想要的结果。
namespaceDemoConsoleApplication { class Program { //数据库连接字符串、根据实际修改 private const string ConnectionString = @"Data Source=|DataDirectory|\\Database1.sdf"; static void Main(string[]args) { //获取用户输入的内容 Console.WriteLine("请输入用户名"); string Passport = Console.ReadLine(); Console.WriteLine("请输入密码"); string Password = Console.ReadLine(); using (SqlConnectionConn = new SqlConnection(ConnectionString)) { Conn.Open();//打开数据库 using (SqlCommandCmd = Conn.CreateCommand()) { Cmd.CommandText= "select * from TB_Users where passport=@UN and password=@PWD"; Cmd.Parameters.Add(newSqlParameter("UN",Passport)); Cmd.Parameters.Add(newSqlParameter("PWD",Password)); if (1== Cmd.ExecuteNonQuery()) Console.WriteLine("登陆成功!"); else Console.WriteLine("登陆失败!"); } } Console.ReadKey(); } } }
评论被关闭。