2010-04-21 5 views
3

Nous obtenons une erreur de serveur indiquant "Le nombre de paramètres ne correspond pas au nombre de paramètres". Quelqu'un a-t-il une idée de ce que cela pourrait signifier?Le nombre de paramètres ne correspond pas Nombre de valeurs de paramètre

Notre site est sur des formulaires Web ASP.NET exécutant DotNetNuke en tant que CMS.

J'ai essayé de télécharger une ancienne version du fichier web.config mais cela ne semble pas avoir changé depuis que l'erreur est apparue. Ce n'était pas dans nos récents téléchargements de fichiers de module parce que j'ai ré-uploadé les anciens fichiers de ce matin que nous avons changé.

Est-ce que des changements dans la base de données pourraient causer cela ou seraient-ils dus à une erreur dans le code?

Merci.

Répondre

5

Une requête SQL ou une procédure stockée a plus de paramètres spécifiés que les valeurs des paramètres reçus.

Quelque chose comme ceci:

command.CommandText = "EXEC test @a"; 
command.Parameters.Add("@a", "a"); 
command.Parameters.Add("@b", "b"); 

dire regardez le schéma de base de données. A-t-il été changé? Les procédures stockées ont-elles été modifiées?

+0

Est-il possible de dire quelle procédure a été stockée? – Matt

+0

@Matt: allez dans 'DotNetNuke.Data.SqlDataProvider.GetPortals (string)' et découvrez quel SP est appelé là – abatishchev

+1

Trouvé, il s'avère que le proc stocké GetPortals a été changé de façon ... un peu effrayant pour un site en direct . Merci pour l'aide! – Matt

4

J'ai trouvé que si vous utilisez des paramètres qui ont des valeurs par défaut, certaines bibliothèques ne peuvent pas gérer. Par exemple, nous avons une application qui utilise une ancienne version de la méthode d'accès aux données Microsoft Enterprise Library qui vous permet de transmettre des paramètres sous la forme d'un tableau.

Échec si la quantité d'éléments dans le tableau ne correspond pas exactement au nombre de paramètres de la procédure stockée, que certains soient «facultatifs» ou non.

Dans les cas comme celui-ci doivent utiliser ADO.NET droite et utilisez la syntaxe cmd.Parameters.AddWithValues("@parameterName", value)

pour les paramètres de procédure stockée nécessaires. Vous n'aurez pas à ajouter, lors de l'utilisation de cette méthode, les paramètres de commande pour les paramètres de procédure stockée 'facultatif'.

+0

+1 pour fournir une solution autre que l'évidence –

0

J'ai eu le même problème et j'ai trouvé qu'il était en train de choisir les champs d'un cache temporaire qui était maintenu par MySQLHelper.

Questions connexes