2012-04-17 5 views
0

私は、ユーザーがUserID(int)またはユーザー名(string)を使用してログインできるようにしようとしています。私がこれを行うことを考えた方法は、文字列を受け入れるメソッドとintを受け入れるメソッドの2つの別々のメソッドを作成することです。しかし、私はこれを動作させることができませんでしたし、よりよい解決策があるようです。この方法でメソッドをオーバーロードすることは可能ですか?

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を取得し、2番目の方法に渡します。

ユーザー名がユーザーIDと一致しない場合は、ユーザーIDが存在しない場合と同じ方法でエラーを返します。

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

私はこの方法を試してみる必要があります、あなたに戻ってきます。 –

関連する問題