Secret Squirrel měl pravdu, když použil "?" pro parametrizované proměnné. MySQL používá "@" pro inline SQL proměnné pro dotazy, a proto očekává, že budou deklarovány, například ze skriptu nebo části inline (select subquery) deklarace.
Musíte změnit OBĚ instance parametrů... jak v dotazu, tak jako instance command.Parameters.Add...
Také jsem si všiml, a nejsem si jistý, jestli je to ono nebo ne, ale ve vaší klauzuli WHERE máte "heslo" (pouze jedno 's') vs heslo (dvě 's') Nevím, jestli úmyslně nebo ne.
Jedna POSLEDNÍ věc, která MŮŽE pomoci. Vzhledem k tomu, že některé parametry odpovídají názvům sloupců, navrhoval bych MÍRNĚ změnit parametry pouhým přidáním něčeho jako "x" do FORCE rozlišení mezi názvem sloupce a skutečnými parametry...
where... p.LoginID = ?xLoginID ...
a v parametrech příkazu
objCommand.Parameters.AddWithValue("?xLoginID", loginID);