У меня есть база данных и в ней есть 1 запись у которой Login = test123-Login , и Password = test123-Login. Но когда я ввожу Логин test123-Login и пароль test123-login (здесь l маленькая а в записи большая).
DataBaseHelper.cs
public static bool LoginExist(string login, string password)
{
try
{
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
string clearLogin = login.Trim();
string clearPassword = password.Trim();
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM [Table] WHERE Login=@clearLogin AND Password=@clearPassword", connection);
cmd.Parameters.Add("clearLogin", SqlDbType.VarChar).Value = clearLogin;
cmd.Parameters.Add("clearPassword", SqlDbType.VarChar).Value = clearPassword;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
int count = Convert.ToInt32(dt.Rows[0][0].ToString());
return count == 0 ? false : true;
}
}
catch { MessageBox.Show("Ошибка авторизации! Перезапустите приложение.", "Ошибка авторизации", MessageBoxButton.OK, MessageBoxImage.Error); return false; }
}
И когда я ввожу неправильный пароль то мне все равно дает зайти в главное приложение. Как это исправить?
И кто может то подскажите правильно ли я все делаю? И как лучше сделать реализацию авторизации?
Ошибка в том, что не указана длина типа varchar
:
cmd.Parameters.Add("clearLogin", SqlDbType.VarChar).Value = clearLogin;
Таким образом, длина равна 1.
Размер нужно указать тот же, который у вас в таблице.
cmd.Parameters.Add("clearLogin", SqlDbType.VarChar, 24).Value = clearLogin;
К тому же, возможно, стоит использовать nvarchar
- это позволит использовать не только английские буквы в логине и пароле (если вас это устраивает).
Использование DataTable
в данном случае совершенно излишне.
Кроме того, следует диспозить (освобождать) все используемые ресурсы.
Давайте перепишем код:
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
string clearLogin = login.Trim();
string clearPassword = password.Trim();
using (SqlCommand cmd = new SqlCommand(
"SELECT COUNT(*) FROM [Table] WHERE Login=@clearLogin AND Password=@clearPassword",
connection))
{
cmd.Parameters.Add("clearLogin", SqlDbType.VarChar, 24).Value = clearLogin;
cmd.Parameters.Add("clearPassword", SqlDbType.VarChar, 24).Value = clearPassword;
int count = (int)cmd.ExecuteScalar();
return count != 0;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Разрабатываю приложение на C# с сайтом и web api на aspnet
Изучаю фреймворк Nancy, как альтернативу тяжелому ASPnet