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

Comment corriger l'exception IndexOutOfBoundsException lors de l'utilisation de requêtes paramétrées dans MySQL avec C# ?

DDD
Libérer: 2024-12-22 16:54:12
original
126 Les gens l'ont consulté

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

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));
}
Copier après la connexion

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);
}
Copier après la connexion

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;
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal