Dépannage d'une erreur de requête paramétrée dans MySQL avec C#
Lors de l'utilisation de requêtes paramétrées dans MySQL avec C#, il est crucial d'éviter les pièges courants qui peuvent conduire aux erreurs. L'un de ces problèmes qui survient fréquemment est l'IndexOutOfBoundsException rencontrée lors de l'ajout du premier paramètre.
Problème :
Considérez l'extrait de code simplifié suivant :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_2 = ?;"; public bool read(string id) { MySqlCommand m = new MySqlCommand(readCommand); m.Parameters.Add(new MySqlParameter("", val1)); m.Parameters.Add(new MySqlParameter("", val2)); }
Lors de l'exécution de ce code, l'erreur se produit lors de la tentative d'ajout du premier paramètre (index 0).
Solution :
Pour résoudre ce problème, la syntaxe correcte pour définir la requête paramétrée consiste à utiliser des paramètres nommés au lieu de points d'interrogation (?). Les paramètres nommés sont plus robustes et éliminent la confusion causée par les index d'espace réservé numérotés :
private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = @param_val_1 AND VAL_2 = @param_val_2;"; public bool read(string id) { MySqlCommand m = new MySqlCommand(readCommand); m.Parameters.AddWithValue("@param_val_1", val1); m.Parameters.AddWithValue("@param_val_2", val2); }
De plus, il est recommandé de simplifier le code en utilisant la méthode ExecuteScalar pour récupérer une seule valeur de la requête. Cela élimine le besoin d'itérer via un lecteur de données et convertit le résultat directement dans le type de données souhaité (dans ce cas, un entier) :
public bool read(string id) { 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; }
En employant ces bonnes pratiques, vous pouvez éviter l'exception IndexOutOfBoundsException et assurez une exécution fiable des requêtes paramétrées dans votre base de données MySQL en utilisant C#.
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!