2017-05-28 5 views
0

Ich erhalte diesen Fehler auf meinem Anmeldeformular. Ich bin mir nicht sicher, ob ich das beheben kann, weil ich nicht weiß, was falsch ist.InvalidOperationException: kein aktueller Zeilenfehler

InvalidOperationException: keine aktuelle Zeile

Wenn ich die App starten, es stürzt ab.

enter image description here

 private void buttonLogin_Click(object sender, EventArgs e) 
    { 
     SQLiteConnection conn = new SQLiteConnection("data source = zivali_v2.sqlite"); 
     conn.Open(); 
     SQLiteCommand com = new SQLiteCommand(conn); 

     com.CommandText = "SELECT * FROM login;"; 

     SQLiteDataReader reader = com.ExecuteReader(); 

      string username = reader["username"].ToString(); 
      string password = reader["password"].ToString(); 

     bool loginValid = false; 
     while (reader.Read()) 
     { 
      if (username == textBoxUserName.Text && password == textBoxPassword.Text) 
      { 
       loginValid = true; 
       break; 

      } 
     } 

     if (loginValid) 
     { 
      MessageBox.Show("OK"); 
     } 
     else 
     { 
      MessageBox.Show("Wrong username or password"); 
     } 
     conn.Close(); 

    } 
+0

Hey, was ist mit deiner Verbindungszeichenfolge? 'SQLiteConnection conn = neue SQLiteConnection (" Datenquelle = zivali_v2.sqlite ");' –

+0

Was meinst du? Glaubst du, meine Verbindung ist das Problem? – krneki

+0

Es kann sein, aber es ist seltsam, dass Sie einen Fehler bei der Funktion conn.open() erhalten. Mit welcher DB verbinden Sie sich? –

Antwort

0

Ein Leser-Objekt stellt eine Folge der Abfrage, die wie ein Tisch geformt ist, das heißt, es Spalten und Zeilen aufweist.

Ein Ausdruck wie reader["username"] liest den Wert in der angegebenen Spalte und in der aktuellen Zeile. Aber vor dem ersten Read() Aufruf gibt es keine aktuelle Zeile. Dies ist, was die Fehlermeldung Ihnen sagt.

Sie dürfen den reader["username"] Aufruf nicht aus der Schleife verschieben; Sie haben, um einen Anruf in jeder Schleife Iteration machen einen neuen Wert aus jeder Zeile zu erhalten:

while (reader.Read()) { 
    username = reader["username"] ... 
} 

(. Und es wäre eine bessere Idee, die Datenbank zu lassen, die Vergleiche verwenden und zu use parameters)

Verwandte Themen