2017-04-11 2 views
0

ich bin im Grunde ein Multiple-Choice-Quiz, wo der Benutzer eine Punktzahl basierend auf ihrer Leistung usw. erhalten wird ... Ich speichere ihre Punktzahl in einer Datenbank für jeden einzelnen anderen Test auf meine Seite. Ich möchte ihre Punktzahl nicht speichern, wenn der Wert, den sie in diesem bestimmten Durchgang des Multiple-Choice-Tests erhalten, geringer ist als der Wert, der bereits in der Datenbank zugewiesen ist. Ich muss in der Lage sein, die Punktzahl des Benutzers in der Datenbank zu extrahieren (Standard-Score ist 0 in meiner Datenbanktabelle, so wird immer ein Wert sein), vergleichen Sie es mit der Punktzahl, die sie gerade erhalten haben und wenn es größer ist, speichern die neue Punktzahl in die Datenbank.Daten von MySql-Datenbank sammeln, um mit Variable zu vergleichen

Ich kann nicht herausfinden, wie man nur die Werte des Benutzers extrahiert und es einer Variablen zuweist, damit ich die zwei vergleichen kann. Ich bin mit dem Benutzer-ID als Primärschlüssel in der Tabelle

Bisher habe ich die Folowing:

protected void Submit_Click(object sender, EventArgs e) 
{ 
    if (!this.IsValid) 
     return; 
    int score = 0; 
    List<RadioButtonList> list = new List<RadioButtonList>() { RadioButtonList1, RadioButtonList2, RadioButtonList3, RadioButtonList4, RadioButtonList5, RadioButtonList6, RadioButtonList7, RadioButtonList8, RadioButtonList9, RadioButtonList10 }; 
    foreach (var element in list) 
    { 
     if (element.SelectedValue == "Correct") 
     { 
      score++; 
     } 

    } 
    Response.Write("you scored: " + score); 
    Button1.Visible = false; 

    if (score != 0) ; 
    { 
     string UserId = User.Identity.GetUserId(); 

     string MyConString = "SERVER=localhost;" + 
     "DATABASE=synther_physics;" + 
     "UID=root;" + 
     "PASSWORD=rootpass;"; 
     MySqlConnection connection = new MySqlConnection(MyConString); 




     MySqlCommand commandPull = connection.CreateCommand(); 
     commandPull.CommandText = "SELECT score FROM userscores WHERE Id = UserID"; 
     int DBscore = 
     connection.Open(); 
     int RowsAffected = commandPull.ExecuteNonQuery(); 
     connection.Close(); 



     if (DBscore < score) ; 
     { 
      Response.Write("New high score! Well done!"); 
      MySqlCommand commandReplace = connection.CreateCommand(); 
      commandReplace.CommandText = "REPLACE INTO userscores (Id, momentsandenergytestscore) VALUES (@Id,@score)"; 

      commandReplace.Parameters.AddWithValue("@Id", UserId); 
      commandReplace.Parameters.AddWithValue("@score", score); 

      connection.Open(); 
      int RowsAffectedReplace = commandReplace.ExecuteNonQuery(); 
      connection.Close(); 

     } 

     else; 
     { 
      Response.Write("You didnt beat your previous best of" + DBscore); 
     } 
    } 
} 

Der Teil, wo ich tatsächlich die Daten zu ziehen und zu vergleichen, ich versuche, ist hier (beachten Sie den Code unvollständig) ist:

MySqlCommand commandPull = connection.CreateCommand(); 
commandPull.CommandText = "SELECT score FROM userscores WHERE Id = UserID"; 
DBscore = 
connection.Open(); 
int RowsAffected = commandPull.ExecuteNonQuery(); 
connection.Close(); 

Antwort

0

Sie ExecuteScalar verwenden können, um die Punktzahl zu bekommen:

int dbscore = (int)commandPull.ExecuteScalar(); 

ExecuteScalar führt die Abfrage aus und gibt die erste Spalte der ersten Zeile in der von der Abfrage zurückgegebenen Ergebnismenge zurück.

+0

Vielen Dank für die Antwort, bekomme ich einen Fehler, wenn Sie dies versuchen: Objektreferenz nicht auf eine Instanz eines Objekts gesetzt. –

+0

Vielleicht ist das Problem hier: 'commandPull.CommandText =" SELECT Punktzahl FROM userscores WHERE Id = UserID ";'. Sie müssen "UserId" für "@ Id" und dann "commandPull.Parameters.AddWithValue (" @ Id ", UserId) ändern;' – Pikoh

+0

ist dies eine neue Zeile? vor dem Definieren der Variablen DBscore? –

Verwandte Themen