Maison >base de données >tutoriel mysql >Comment résoudre IndexOutOfBoundsException dans les requêtes paramétrées MySQL avec C# ?
Lorsque vous travaillez avec des requêtes paramétrées dans MySQL en utilisant C#, il est important de vous assurer que les noms et valeurs des paramètres sont corrects pour éviter les exceptions. Dans ce cas, une IndexOutOfBoundsException est rencontrée lors de l'ajout du premier paramètre.
Pour résoudre ce problème, vérifiez que les noms des paramètres dans la chaîne de requête et les paramètres ajoutés à l'objet MySqlCommand correspondent. De plus, tenez compte des éléments suivants :
Dans le code fourni :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";
Vous avez utilisé par erreur ? des espaces réservés dans la chaîne de requête, qui ne sont pas pris en charge par MySQL. Au lieu de cela, MySQL attend des paramètres nommés, qui doivent commencer par @.
Remplacez la chaîne de requête par ce qui suit :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;";
En outre, utilisez la méthode AddWithValue pour ajouter des paramètres à l'objet de commande :
m.Parameters.AddWithValue("@param_val_1", val1); m.Parameters.AddWithValue("@param_val_2", val2);
Cela garantit que les noms des paramètres correspondent aux espaces réservés dans la requête string.
Dans le code modifié, la valeur du niveau est récupérée à l'aide de ExecuteScalar au lieu de ExecuteReader. En effet, la requête renvoie une valeur unique (niveau), donc l'utilisation de ExecuteScalar est plus efficace.
En apportant ces modifications, vous devriez pouvoir exécuter la requête paramétrée sans rencontrer d'exceptions.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!