Esquilo Secreto estava correto ao usar o "?" para variáveis parametrizadas. O MySQL usa "@" para variáveis sql inline para consultas e, portanto, espera que elas sejam declaradas como de um script ou parte de uma declaração inline (selecionar subconsulta).
Você precisa alterar AMBAS as instâncias dos parâmetros... tanto na consulta quanto nas instâncias command.Parameters.Add....
Além disso, notei, e não tenho certeza se é isso ou não, mas na sua cláusula WHERE você tem "senha" (apenas um 's') vs senha (dois 's') Não sei se intencional ou não.
Uma ÚLTIMA coisa que PODE ajudar. Como alguns dos parâmetros correspondem aos nomes das colunas, sugiro alterar ligeiramente os parâmetros apenas adicionando algo como "x" à diferenciação FORCE entre o nome da coluna e os parâmetros reais ...
where... p.LoginID = ?xLoginID ...
e nos parâmetros de comando
objCommand.Parameters.AddWithValue("?xLoginID", loginID);