Laden...

Keine Daten enthalten, wie umgehen?

Erstellt von exeto vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.815 Views
Thema geschlossen
E
exeto Themenstarter:in
4 Beiträge seit 2011
vor 11 Jahren
Keine Daten enthalten, wie umgehen?

Hallo,

ich programmiere grad zum üben einen einfachen Login mit Anbindung an eine SQL Datenbank.

Klappt auch alles. Wenn ich die richtigen Daten eingebe kommt die Message Box mit Zugriff erlaubt.

Wenn ich aber die Daten falsch eingebe, stürzt das Programm ab und schreibt mir den Fehler > Fehlermeldung:

Ungültiger Leseversuch, wenn keine Daten vorhanden sind. Ist mir auch klar warum, aber irgendwie hängts gerade wie ich das Problem umgehe. Hier bräuchte ich mal Hilfe.

        
private void button1_Click(object sender, EventArgs e)
        {
            if (Benutzerverwaltung.get().getDBIFace().Login(textBox1.Text, textBox2.Text))
            {
                MessageBox.Show("Zugriff erlaubt");
            }
            else
            {
                MessageBox.Show("Zugriff erweigert");
            }
        }


 public bool Login(String Benutzername, String Passwort)
        {

            SqlDataReader data = mSql.query("SELECT Benutzername,Passwort From Benutzer WHERE Benutzername='" + Benutzername + "' and Passwort='" + Passwort + "'");

            data.Read();
            if ((data["Benutzername"].ToString()) == Benutzername)
              {
                  if ((data["Passwort"].ToString()) == Passwort)
                  {
                        return true;
                  }
                  else
                  {
                        return false;
                  }
              }
              else
              {
                  return false;
              }
        }

Danke

C
258 Beiträge seit 2011
vor 11 Jahren
if(!data.HasRows)
return false;

system.data.sqlclient.sqldatareader.hasrows

Das sind jedoch grundlagen, bitte beachte in Zukunft
[Hinweis] Wie poste ich richtig?
1.1, 1.1.1 und 2.1

Nochdazu fragst du in der Query schon ab ob ein Eintrag mit übereinstimmenden namen und passwort vorhanden ist, somit sind die If abfragen umsonst. Kurz könnte das so aussehen:


            using (SqlDataReader reader = mSql.query("SELECT * FROM Benutzer WHERE Benutzername='" + Benutzername + "' and Passwort='" + Passwort + "'"))
            {
                return reader.HasRows;
            }

Auch wenn man einen Login nicht als plain text in einer DB Speichern sollte

E
exeto Themenstarter:in
4 Beiträge seit 2011
vor 11 Jahren

Ok, danke

Hab auch gerade den richtigen Denkanstoß gehabt. Habe im SQL Management Studio mal eine Abfrage gemacht die Daten zurückgibt und einmal eine die keine zurückgibt.

Und dann rechts gesehen das Feld "Zurückgegebende Zeilen". Einmal steht eine eins und einmal eine null drinne.

Grüße

F
10.010 Beiträge seit 2004
vor 11 Jahren
16.835 Beiträge seit 2008
vor 11 Jahren

* Passwortinformationen im Klartext? Ein absolutes NoGo!
* Absolute SQL Injectiongefahr! [Artikelserie] SQL: Parameter von Befehlen

Du solltest Dich hier ganz dringend mit den Grundlagen beschäftigen bevor Du weiter machst - sowohl in Sachen C#, wie auch Datenbanken und Sicherheit!
[Hinweis] Wie poste ich richtig? Punkt 1.1.1

Thema geschlossen