Beim Arbeiten mit parametrisierten Abfragen in MySQL unter Verwendung von C# ist es wichtig sicherzustellen, dass die Parameternamen und -werte korrekt sind Vermeiden Sie Ausnahmen. In diesem Fall tritt beim Hinzufügen des ersten Parameters eine IndexOutOfBoundsException auf.
Um dieses Problem zu beheben, überprüfen Sie, ob die Parameternamen in der Abfragezeichenfolge und die dem MySqlCommand-Objekt hinzugefügten Parameter übereinstimmen. Beachten Sie außerdem Folgendes:
Im bereitgestellten Code:
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
Sie haben fälschlicherweise verwendet? Platzhalter in der Abfragezeichenfolge, die von MySQL nicht unterstützt werden. Stattdessen erwartet MySQL benannte Parameter, die mit @ beginnen sollten.
Ersetzen Sie die Abfragezeichenfolge durch Folgendes:
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";
Verwenden Sie zusätzlich die Methode AddWithValue So fügen Sie Parameter zum Befehlsobjekt hinzu:
m.Parameters.AddWithValue("@param_val_1", val1); m.Parameters.AddWithValue("@param_val_2", val2);
Dadurch wird sichergestellt, dass die Parameternamen mit den Platzhaltern in der Abfrage übereinstimmen string.
Im geänderten Code wird der Ebenenwert mithilfe von ExecuteScalar anstelle von ExecuteReader abgerufen. Dies liegt daran, dass die Abfrage einen einzelnen Wert (Ebene) zurückgibt, sodass die Verwendung von ExecuteScalar effizienter ist.
Durch diese Änderungen sollten Sie in der Lage sein, die parametrisierte Abfrage auszuführen, ohne dass Ausnahmen auftreten.
Das obige ist der detaillierte Inhalt vonWie löst man IndexOutOfBoundsException in MySQL-parametrisierten Abfragen mit C# auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!