Я работаю над страницей входа. Я хотел бы проверить, существует ли имя пользователя и пароль в базе данных. У меня есть три таблицы базы данных: команды, организаторы, администраторы с полем имени пользователя и пароля в каждой таблице соответственно. Я реализую вход в трехуровневую архитектуру.
Я полагаю, что у меня проблема с приведенным ниже оператором SQL. Я протестировал свой sql-запрос с отличным/действительным именем пользователя и паролем команды. Запрос COUNT возвращает более одной строки, что неверно.
Это мои коды для уровня доступа к данным:
public int getExistingAccount(string username, string password)
{
string queryStr = "SELECT COUNT(*) FROM Teams t,Organizers o,Admins a WHERE (t.teamUsername=@username AND t.teamPassword=@password) OR (o.organizerUsername=@username AND o.organizerPassword=@password) OR (a.adminUsername=@username AND a.adminPassword=@password)";
SqlConnection conn = new SqlConnection(_connStr);
SqlCommand cmd = new SqlCommand(queryStr, conn);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
int returnValue = 0;
conn.Open();
returnValue = (int)cmd.ExecuteScalar();
conn.Close();
return returnValue;
}
Что касается кодов уровня бизнес-логики:
public string getAccount(string username, string password)
{
string returnMessage = "";
if (username.Length == 0)
returnMessage += "Username cannot empty</br>";
if (password.Length == 0)
returnMessage += "Password cannot be empty</br>";
if (username.Equals(password))
{
returnMessage += "Duplicate value. Please try again</br>";
}
//Invoke validateInput() method to validate data
if (returnMessage.Length == 0)
{
int noOfRows = 0;
LogAccounts logInd = new LogAccounts();
noOfRows = logInd.getExistingAccount(username, password);
if (noOfRows > 0)
returnMessage += "Account found";
else
returnMessage += "Invalid username/password.";
}
return returnMessage;
}