Secret Squirrel aveva ragione nell'usare il "?" per variabili parametrizzate. MySQL usa "@" per le variabili sql inline per le query e quindi si aspetta che vengano dichiarate come da uno script o da una parte di una dichiarazione inline (seleziona sottoquery).
È necessario modificare ENTRAMBE le istanze dei parametri... sia nella query, sia come comando.Parameters.Add... istanze.
Inoltre, ho notato, e non sono sicuro se lo sia o meno, ma nella tua clausola WHERE hai "pasword" (solo una "s") vs password (due "s") Non so se intenzionale o meno.
Un'ULTIMA cosa che POTREBBE aiutare. Poiché alcuni parametri corrispondono ai nomi delle colonne, suggerirei di modificare LEGGERMENTE i parametri semplicemente aggiungendo qualcosa come "x" per FORZARE la differenziazione tra il nome della colonna e i parametri effettivi...
where... p.LoginID = ?xLoginID ...
e nei parametri del comando
objCommand.Parameters.AddWithValue("?xLoginID", loginID);