ОК, чтобы ответить на основную проблему, которая у вас возникла (как вы уже сказали, вы новичок в проблеме SQL-инъекций).
Инъекция SQL вызвана динамическим построением запроса SQL с использованием пользовательского ввода как части конструкции. Самое простое решение этого в .Net - создать параметризованный запрос.
Я думаю, что у Джеффа Этвуда самая полная, но лаконичная статья с объяснением и полным примером здесь
Цитата сверху ссылка:
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "SELECT email, passwd, login_id, full_name " +
"FROM members WHERE email = @email";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@email", email);
SqlDataReader reader = cmd.ExecuteReader();
Проблема под рукой:
Причина, по которой он все еще входит в учетную запись, заключается в том, что запрос все еще "действителен".
Оператор по-прежнему будет выполняться, и соответствующая запись будет по-прежнему возвращаться из базы данных, исключение не выдается.
Единственный способ остановить процесс входа в систему, если указаны неверные данные, - это проверить ввод перед выполнением запроса. Вы должны всегда проверять пользовательский ввод перед тем, как отправит его в базу данных. Если пользователь должен был предоставить:
username'; drop table users;--
как имя пользователя, вы будете иметь LOT неприятностей.