Secret Squirrel avait raison d'utiliser le "?" pour les variables paramétrées. MySQL utilise "@" pour les variables SQL en ligne pour les requêtes et s'attend donc à ce qu'elles soient déclarées, par exemple à partir d'un script ou d'une partie d'une déclaration en ligne (sélectionner une sous-requête).
Vous devez modifier les DEUX instances des paramètres... à la fois dans la requête et en tant qu'instances command.Parameters.Add....
De plus, j'ai remarqué, et je ne sais pas si c'est le cas ou non, mais dans votre clause WHERE, vous avez "mot de passe" (un seul 's') vs mot de passe (deux 's') Je ne sais pas si intentionnel ou non.
Une DERNIÈRE chose qui PEUT aider. Étant donné que certains paramètres correspondent aux noms de colonne, je suggérerais de modifier LÉGÈREMENT les paramètres en ajoutant simplement quelque chose comme "x" à la différenciation FORCE entre le nom de la colonne et les paramètres réels...
where... p.LoginID = ?xLoginID ...
et dans les paramètres de la commande
objCommand.Parameters.AddWithValue("?xLoginID", loginID);