Parametrierte Abfrage für MySQL mit C#
Bei der Arbeit mit SQL-Abfragen werden parametrisierte Abfragen dringend empfohlen. Sie schützen vor SQL-Injection-Angriffen und verbessern die Leistung, indem sie die Verkettung von Zeichenfolgenwerten überflüssig machen.
Bei der Verwendung parametrisierter Abfragen mit MySQL aus C# ist es jedoch wichtig, sicherzustellen, dass Ihr Code richtig konfiguriert ist. Ein möglicher Fehler, der auftreten kann, ist eine IndexOutOfBoundsException beim Hinzufügen des ersten Parameters.
Das Problem:
Im angegebenen Code:
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
Das Problem liegt in der Abfragezeichenfolge, die ein Fragezeichen (?) als Platzhalter für Parameter verwendet. MySQL erkennt Fragezeichen nicht als Parameterplatzhalter; Es erwartet benannte Parameter mit dem Präfix „@“.
Die Lösung:
Um das Problem zu beheben, müssen Sie die Abfragezeichenfolge ändern, um benannte Parameter zu verwenden, und das hinzufügen Parameter zum MySqlCommand-Objekt mithilfe der AddWithValue()-Methode:
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";
public bool read(string id) { level = -1; MySqlCommand m = new MySqlCommand(readCommand); m.Parameters.AddWithValue("@param_val_1", val1); m.Parameters.AddWithValue("@param_val_2", val2); level = Convert.ToInt32(m.ExecuteScalar()); return true; }
Durch die Verwendung benannter Parameter und der AddWithValue()-Methode wird die Abfrage erfolgreich ausgeführt, ohne dass eine IndexOutOfBoundsException auftritt.
Das obige ist der detaillierte Inhalt vonWie vermeide ich IndexOutOfBoundsException bei der Verwendung parametrisierter Abfragen mit MySQL in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!