로그인 페이지에서 작업하고 있습니다. 나는 사용자 이름 & 암호가 데이터베이스에 있는지 확인하고 싶습니다. 세 개의 데이터베이스 테이블이 있습니다 : 팀, 주최자, 사용자 이름이 각각 & 인 관리자, 각각 각 테이블의 비밀번호 필드. 3 계층 아키텍처에서 로그인을 구현 중입니다.사용자 이름/암호가 여러 테이블에 있는지 확인하십시오.
아래 SQL 문에 문제가 있다고 생각합니다. 고유 한/유효한 팀 사용자 이름과 팀 암호로 SQL 쿼리를 테스트했습니다. COUNT 쿼리가 두 개 이상의 행을 반환하는데 잘못되었습니다. 비즈니스 로직 계층 코드에 관해서는
public int getExistingAccount(string username, string password)
{
string queryStr = "SELECT COUNT(*) FROM Teams t,Organizers o,Admins a WHERE ([email protected] AND [email protected]) OR ([email protected] AND [email protected]) OR ([email protected] AND [email protected])";
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;
}
count (*)를 *로 바꾸면 어떻게됩니까? 예상되는 행을 얻었습니까? – jarlh
번호는 t에 팀의 이름 로 ( SELECT t.teamUsername에서 예상 행을 – Enovyne
SELECT COUNT (*) 를 반환하지 않습니다 WHERE [email protected] 및 [email protected] UNION SELECT o.organizerUsername 조직 FROM 자명 같은 O WHERE 자명 로서 관리자 [email protected] FROM AND [email protected] 연합 SELECT a.adminUsername WHERE [email protected] AND a.adminPassword = @password ) –