Secret Squirrel беше прав при използването на "?" за параметризирани променливи. MySQL използва "@" за вградени sql променливи за заявки и по този начин очаква те да бъдат декларирани, като например от скрипт или част от вградена (изберете подзаявка) декларация.
Трябва да промените И ДВЕТЕ екземпляри на параметрите... както в заявката, така и като командата.Parameters.Add... екземпляри.
Освен това забелязах и не съм сигурен дали е така или не, но във вашата клауза WHERE имате „парола“ (само едно „s“) срещу парола (две „s“). Не знам дали е умишлено или не.
Едно ПОСЛЕДНО нещо, което може да помогне. Тъй като някои от параметрите съвпадат с имената на колоните, бих предложил да промените параметрите ЛЕКО, като просто добавите нещо като "x" към ПРИЛОЖИТЕЛНО разграничаване между името на колоната и действителните параметри...
where... p.LoginID = ?xLoginID ...
и в параметрите на командата
objCommand.Parameters.AddWithValue("?xLoginID", loginID);