Maison >base de données >tutoriel mysql >Pourquoi ma procédure stockée SQL génère-t-elle une erreur « La procédure ou la fonction « … » attend le paramètre « @nom du paramètre », qui n'a pas été fourni » ?

Pourquoi ma procédure stockée SQL génère-t-elle une erreur « La procédure ou la fonction « … » attend le paramètre « @nom du paramètre », qui n'a pas été fourni » ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-06 16:50:40315parcourir

Why Does My SQL Stored Procedure Throw a

Une procédure stockée ou une fonction attend un paramètre censé être fourni

Lors de l'appel d'une procédure stockée pour insérer des données dans une base de données SQL Server, vous pouvez rencontrer l'erreur "La procédure ou la fonction 'nom de la procédure stockée' attend le paramètre '@nom du paramètre', qui n'a pas été fourni." Ce message d'erreur peut prêter à confusion, surtout si vous avez vérifié que la procédure stockée possède les paramètres corrects et qu'ils sont fournis dans votre code.

Dépannage de l'erreur

Pour résoudre ce problème, examinez attentivement les éléments suivants :

  • Vérifiez les noms et les données des paramètres. Types : Assurez-vous que les noms de paramètres et les types de données dans votre code correspondent exactement à ceux définis dans la procédure stockée. Utilisez la même casse et évitez toute faute de frappe.
  • Vérifiez le type de commande : Spécifiez le type de commande comme StoredProcedure pour indiquer explicitement que vous appelez une procédure stockée. Omettre ce paramètre peut entraîner une ambiguïté quant à la commande en cours d'exécution.
  • Désactiver les valeurs par défaut : Si des valeurs par défaut sont définies pour les paramètres dans la procédure stockée, elles doivent être explicitement spécifiées dans votre code, même si vous ne souhaitez pas fournir de valeurs personnalisées.
  • Ordre des paramètres : L'ordre des paramètres dans votre code doit correspondre à l'ordre défini dans la procédure stockée. Si un paramètre est manquant ou en panne, l'erreur se produira.

Exemple de mise à jour du code

Voici une version mise à jour de votre code qui spécifie explicitement le type de commande et valeurs des paramètres :

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
    using var dbcon = new SqlConnection(conn);
    using var cmd = new SqlCommand();

    cmd.Connection = dbcon;
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.CommandText = "SHOWuser";

    cmd.Parameters.AddWithValue("@userName", userName);
    cmd.Parameters.AddWithValue("@password", password);
    cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

    dbcon.Open();
    int i = Convert.ToInt32(cmd.ExecuteScalar());

    cmd.Parameters.Clear();
    cmd.CommandText = "tbl_pref";

    foreach (int preference in preferences)
    {
        cmd.Parameters.Clear();
        cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
        cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

        cmd.ExecuteNonQuery();
    }
}

En inspectant soigneusement les noms des paramètres, les types de données, le type de commande et l'ordre des paramètres, vous pouvez atténuez cette erreur et exécutez avec succès votre procédure stockée.

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