6 de febrero de 2015

Utilizar Datatable y ExecuteReader para Login en ASP.NET

Se busca utilizar DataTable para validar las credenciales de un usuario, el diseño de la página web en que se realiza el login podría lucir de la siguiente manera
        Email:
         ID="txtEmail" runat="server">
         ID="RequiredFieldValidator1" runat="server"
            ControlToValidate="txtEmail" ErrorMessage="Email Required"
            ValidationGroup="val">
        
 />
        Password:
         ID="txtPassword" runat="server">
         ID="RequiredFieldValidator2" runat="server"
            ControlToValidate="txtPassword" ErrorMessage="Password Required"
            ValidationGroup="val">
        
 />
         ID="ButtonLogin" runat="server" onclick="ButtonLogin_Click"
            Text="Login" ValidationGroup="val" />
    
    


Y el code behind podría ser así:
protected void ButtonLogin_Click(object sender, EventArgs e){      
      using (DataTable dt = LookupUser(txtEmail.Text))
      {
        if (dt.Rows.Count == 0)
        {
          //Invalid username thus rows.count = 0. Set error message
          return;
        }
        else
        {
          string dbPassword = Convert.ToString(dt.Rows[0]["Password"]);
          if (string.Compare(dbPassword, txtPassword.Text) == 0)
          {
            Response.Redirect("home.aspx");
          }
          else
          {
            //Show error Message
            return; 
          }
        }
      }
    }
 
private static DataTable LookupUser(string Email){     
        const string connStr = "Data Source=.\\sqlexpress;Initial Catalog=TestinDB;Integrated Security=True;";
        const string query = "Select Password From UserTable Where Email = @txtEmail";

  DataTable result = new DataTable();
   using (SqlConnection conn = new SqlConnection(connStr)){
     conn.Open();
    using (SqlCommand cmd = new SqlCommand(query, conn)){
     cmd.Parameters.Add("@txtEmail", SqlDbType.VarChar).Value = Email;
         using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    result.Load(dr);
                }
            }
        }
        return result;
    }