У меня есть база данных sqlite, в которой хранятся имена пользователей и пароли всех зарегистрированных пользователей.Я сейчас пытаюсь создать страницу входа, но я не знаю, как проверить ввод пользователя с помощью базы данных sqlite.
Моя первая идея состояла в том, чтобы преобразовать имена пользователей и пароли, хранящиеся в sqlite, в строковые массивы, а затем перебирать их, пока не найдет то, что пользователь ввел на странице входа, но ни один из методов, которые я нашелонлайн закончил работать.Не уверен, что это даже правильный подход.
Это код в классе DataBaseManager, который должен выбирать все имена пользователей:
public List<User> GetUNames(){
return dbConnection.Query<User>("return dbConnection.Query<User>("Select * FROM [User] WHERE uName = @username AND Pw = @password");
}
И вот где я получилдо сих пор на странице входа в систему:
DatabaseManager DBM = new DatabaseManager();
private async void Handle_Clicked(object sender, System.EventArgs e)
{
for (int i = 0; i < DBM.GetUNames().Count; i++){
}
if (username.Text.ToLower()
}
После того, как проверка имени пользователя начинает работать, я просто сделаю то же самое для паролей (пароли, хранящиеся в приложении прямо сейчас, не хэшируются, яЯ сделаю это позже)Спасибо!
Основываясь на ответе Джейсона, я изменил следующее:
Я добавил это в класс менеджера баз данных: `public bool ValidateUN (строкаusername) {
var results = dbConnection.Table<User>().Where(v => v.uName == username).ToList();
return (results.Count() > 0);
}
public bool ValidatePW(string password)
{
var results = dbConnection.Table<User>().Where(v => v.Pw == password).ToList();
return (results.Count() > 0);
}
А вот так выглядит класс входа в систему сейчас:
DatabaseManager DBM = new DatabaseManager();
private async void Handle_Clicked(object sender, System.EventArgs e)
{
if (DBM.ValidateUN() == username.Text.ToLower() && DBM.ValidatePW == password.Text()) {
await Navigation.PushModalAsync(new Home());
} else if (DBM.ValidateUN() != username.Text.ToLower()){
await DisplayAlert("Error", "Username or password is incorrect", "OK");
} else if (DBM.ValidatePW != password.Text()){
await DisplayAlert("Error", "Username or password is incorrect", "OK");
}
}
Но я получаю ошибки в этих областях в классе входа:
DBM.ValidateUN()
он говорит: «Не задан аргумент, который соответствует необходимому формальному параметру« username »для« DatabaseManager.ValidateUN (string) »«
»А также для .Text
из password.Text()
.он говорит, что «не вызываемый член Entry.Text» не может быть использован как метод.