Maison >base de données >tutoriel mysql >Comment éviter IndexOutOfBoundsException lors de l'utilisation de requêtes paramétrées avec MySQL en C# ?

Comment éviter IndexOutOfBoundsException lors de l'utilisation de requêtes paramétrées avec MySQL en C# ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-15 09:29:09845parcourir

How to Avoid IndexOutOfBoundsException When Using Parameterized Queries with MySQL in C#?

Requête paramétrée pour MySQL avec C#

Lorsque vous travaillez avec des requêtes SQL, les requêtes paramétrées sont fortement recommandées. Ils protègent contre les attaques par injection SQL et améliorent les performances en éliminant le besoin de concaténer des valeurs de chaîne.

Cependant, lorsque vous utilisez des requêtes paramétrées avec MySQL à partir de C#, il est important de vous assurer que votre code est correctement configuré. Une erreur potentielle qui peut survenir est une IndexOutOfBoundsException lors de l'ajout du premier paramètre.

Le problème :

Dans le code donné :

private String readCommand = "SELECT LEVEL FROM USERS WHERE VAL_1 = ? AND VAL_@ = ?;";

Le problème réside dans la chaîne de requête, qui utilise un point d'interrogation (?) comme espace réservé pour les paramètres. MySQL ne reconnaît pas les points d'interrogation comme espaces réservés aux paramètres ; il attend des paramètres nommés préfixés par « @ ».

La solution :

Pour résoudre le problème, vous devez modifier la chaîne de requête pour utiliser les paramètres nommés et ajouter le paramètres à l'objet MySqlCommand à l'aide de la méthode AddWithValue() :

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;
}

En utilisant les paramètres nommés et le AddWithValue(), la requête sera exécutée avec succès sans rencontrer d'IndexOutOfBoundsException.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn