2015-07-25 2 views
0

J'ai toujours utilisé SqlDataAdapter et DataSet pour créer des formulaires de connexion. La logique était comme après avoir satisfait ma requête, s'il y a plus de 0 enregistrement alors la connexion est réussie.Formulaire de connexion à l'aide de sqlDataReader HasRow toujours false

Mais maintenant j'essaie la même chose en utilisant SqlDataReader. Mais même la requête renvoie une ligne dans SQL Server Management Studio, SqlDataReader ne détecte aucune ligne et ignore le bloc de code. Où est-ce que je fais cela mal?

public static bool Login(string username, string password) 
{ 
     string CString = DatabaseHelper.CString; 
     string CText = "select id from tblUser where username='@username' and password='@password'"; 
     using (SqlConnection con = new SqlConnection(CString)) 
     { 
      SqlCommand cmd = new SqlCommand(CText, con); 
      cmd.Parameters.AddWithValue("@userName", username); 
      cmd.Parameters.AddWithValue("@password", password); 
      con.Open(); 
      SqlDataReader rdr = cmd.ExecuteReader(); 

      if (rdr.HasRows) 
      { 
       while (rdr.Read()) 
       { 
         UserSession usr = new UserSession(); 
         usr.userId = rdr["id"].ToString(); 
         usr.username = username; 
         usr.isLoggedIn = true; 
         HttpContext.Current.Session["UserSession"] = usr; 
         return true; 
       } 
      } 
      else 
      { 
       return false; 
      } 

     } 
     return false; 
} 

Répondre

2

Ne placez pas les paramètres entre les guillemets simples.
De cette façon, ils sont traités comme des chaînes littérales et, bien sûr, vous n'avez pas la ligne où la colonne Username contient la chaîne « @username » et même pour « @password »

string CText = @"select id 
        from tblUser 
        where [email protected] 
         and [email protected]"; 
+0

Oh Je suis tellement gêné de faire une telle erreur. Merci. Ça a marché! :) – askBittu