Gå til innhold

Hente ut en enkelt celle fra db(C# + asp.net)


Anbefalte innlegg

Hallo

Jeg har laget dette scriptet for å hente ut kryptert passord fra databasen slik at jeg kan se om brukernavn og passord stemmer. Men jeg får ikke hentet ut den ene cellen med passordet som tilhører brukernavnet som brukeren har screvet inn. Med dette scriptet her får jeg feilen som dere kan se nederst. Noen som kan hjelpe meg og få scriptet til å fungere?

	public void TestBruker_Klikk() {
 string Brukernavn = FormsAuthentication.HashPasswordForStoringInConfigFile(txtBrukernavn.Text,"md5");
 string Passord = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text + txtBrukernavn.Text,"md5");

 
 using(OdbcConnection con = new OdbcConnection(ConnStr))
 using(OdbcCommand cmd = new OdbcCommand("SELECT Password FROM Brukere WHERE Username=@Username", con))
 {
       	cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = Brukernavn.Trim();
       	cmd.Parameters.Add("@Password", OdbcType.VarChar, 32).Value = Passord.Trim();
       
       	con.Open();
   
   OdbcDataReader reader;
   reader = cmd.ExecuteScalar();
   
 	while (reader.read()) {
     object iResults = reader["Value"].ToString.Trim();
 	}
 	
     	}
 if (iResults == Passord) {
 	EtterText.InnerHtml = "Correct login";
 } else {
       	EtterText.InnerHtml = "Uncorrect login";
 }
}

Cannot implicitly convert type 'object' to 'System.Data.Odbc.OdbcDataReader 
Line 65: OdbcDataReader reader; 
Line 66: 
[COLOR=red]Line 67: reader = cmd.ExecuteScalar();[/COLOR]
Line 68: 
Line 69: while (reader.read()) {

Endret av Doffar
Lenke til kommentar
Videoannonse
Annonse

Hei

 

ExecuteScalar returnerer objektet og ikke en reader

prøv dette

 

object iResult = cmd.ExecuteScalar();
if(iResult != null && iResult == Passord)
 // Correct loging
else
  // Incorrect login

 

men en ekstra sikkerhet bør legge inn er å dobbeltsjekke brukernavnet

 

public void TestBruker_Klikk() {
string Brukernavn = FormsAuthentication.HashPasswordForStoringInConfigFile(txtBrukernavn.Text,"md5");
string Passord = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text + txtBrukernavn.Text,"md5");
bool LoginOK = false;


using(OdbcConnection con = new OdbcConnection(ConnStr))
using(OdbcCommand cmd = new OdbcCommand("SELECT Username, Password FROM Brukere WHERE Username=@Username", con))
{
       cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = Brukernavn.Trim();
       cmd.Parameters.Add("@Password", OdbcType.VarChar, 32).Value = Passord.Trim();
      
       con.Open();

  OdbcDataReader reader;
  reader = cmd.ExecuteReader();
  
 if(reader.read()) {
    string strPwd = Convert.ToString( reader["Password"] );
    string strUsername = Convert.ToString( reader["Username"] );

    if(strPwd == Passord && strUsername == Brukernavn)
         loginOK = true;
 }

     }
if (LoginOK) {
 EtterText.InnerHtml = "Correct login";
} else {
       EtterText.InnerHtml = "Uncorrect login";
}
}

Endret av alftore
Lenke til kommentar

Takk for hjelpen, men jeg får det ikke helt til å fungere. Nå har jeg puttet koden jeg fikk inn i scriptet, men uansett hva jeg skriver inn så får jeg at login er correct. Ser du hva som er feil her? Har gjort litt forandring slik at brukernavn ikke blir kryptert.

public void TestBruker_Klikk(object sender, EventArgs e) {
string Brukernavn = txtBrukernavn.Text;
string Passord = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text,"md5");
bool LoginOK = false;


using(SqlConnection con = new SqlConnection(ConnStr))
using(SqlCommand cmd = new SqlCommand("SELECT Username, Password FROM Brukere WHERE Username=@Username", con))
{
      cmd.Parameters.Add("@Username", SqlDbType.VarChar, 255).Value = Brukernavn.Trim();
      cmd.Parameters.Add("@Password", SqlDbType.VarChar, 32).Value = Passord.Trim();
    
      con.Open();

 SqlDataReader reader;
 reader = cmd.ExecuteReader();

if(reader.Read()) {
   strPwd = Convert.ToString( reader["Password"] );
   strUsername = Convert.ToString( reader["Username"] );


   if(strPwd == Passord && strUsername == Brukernavn) 
        LoginOK = true;
}

    }
if (LoginOK = true) {
EtterText.InnerHtml = "Correct login";
} else {
      EtterText.InnerHtml = "Uncorrect login";
}
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...