2012-04-17 4 views
0

사람들이 UserID (int) 또는 사용자 이름 (string)을 사용하여 로그인 할 수있게하려고합니다. 이 작업을 수행하는 방법은 문자열을 허용하는 메서드와 int를 받아들이는 메서드라는 두 개의 별도 메서드를 만드는 것입니다. 그러나 나는 이것을 작동시키지 못했고 더 나은 해결책이있는 것 같았습니다.이런 식으로 메서드를 오버로드 할 수 있습니까?

public static string ForgotPassword (string username) 
{ 
    using (var conn = new SqlConnection(GetConnectionString())) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = 
     @"SELECT 
      Password 
     FROM 
      Distributor 
     WHERE 
      Username = @username"; 
     cmd.Parameters.AddWithValue("@username", (string)username); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      if (!reader.Read()) 
      { 
       // no results found 
       return null; 
      } 
      return reader.GetString(reader.GetOrdinal("Password")); 
     } 
    } 
} 

public static string ForgotPassword (int username) 
{ 
    using (var conn = new SqlConnection(GetConnectionString())) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = 
     @"SELECT 
      Password 
     FROM 
      Distributor 
     WHERE 
      DistributorID= @username"; 
     cmd.Parameters.AddWithValue("@username", (int)username); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      if (!reader.Read()) 
      { 
       // no results found 
       return null; 
      } 
      return reader.GetString(reader.GetOrdinal("Password")); 
     } 
    } 
} 

그들이 USER_ID 또는 사용자 이름으로 로그인 할 수 있도록하는 가장 좋은 방법은 무엇입니까?

+1

원래 시도했을 때 작동하지 않았던 사항은 무엇입니까? –

+0

이 접근법으로 어떤 오류가 있었습니까? – Tuan

+0

오류가 발생하지 않았습니다. 항상 메서드의 문자열 버전을 호출한다고 가정합니다. testuser 및 1234를 암호로 사용하여 로그인 할 수 있습니다. 하지만 101과 1234를했을 때 데이터베이스에서 아무것도 찾을 수 없었습니다. –

답변

2

첫 번째 방법에서는 해당 사용자 이름에서 userId를 확보 한 다음 두 번째 방법으로 전달합니다.

사용자 이름이 UserID와 일치하지 않으면 UserID가없는 것과 같은 방법으로 오류를 반환하십시오.

public static string ForgotPassword (string username) 
{ 
    int userid = //Get userid from username 
    return ForgotPassword(userid); 
} 

public static string ForgotPassword (int username) 
{ 
    using (var conn = new SqlConnection(GetConnectionString())) 
    using (var cmd = conn.CreateCommand()) 
    { 
     conn.Open(); 
     cmd.CommandText = 
     @"SELECT 
      Password 
     FROM 
      Distributor 
     WHERE 
      DistributorID= @username"; 
     cmd.Parameters.AddWithValue("@username", (int)username); 
     using (var reader = cmd.ExecuteReader()) 
     { 
      if (!reader.Read()) 
      { 
       // no results found 
       return null; 
      } 
      return reader.GetString(reader.GetOrdinal("Password")); 
     } 
    } 
} 
+0

경고 : 스택 오버플로 – musefan

+0

@ musefan 수정 됨 : – Curt

+0

나는이 방법을 시도해야합니다, 당신에게 돌아갈 것입니다. –

관련 문제