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
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
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
[Artikelserie] SQL: Parameter von Befehlen
[Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen
Bitte lies dir das durch, was Du machst ist fahrlässig.
* 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
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code