ODBC and SQL work differently
The parameter in the query should be a q-mark '?'
The parameters can be any unique name and must be added to the collection in the same order as the q-marks they should replace appear in the query
i.e.
string q = "select * from t_able where a = ? and b = ?";
OdbcCommand cmd = new OdbcCommand(q, con)
cmd.Parameters.AddWithValue("ParamA", aValue);
cmd.Parameters.AddWithValue("ParamB", bValue);
Even when you wish to use the same parameter twice in the same query, you will have to add two parameters with unique names and the same value.
This is because ODBC is much more generic that TSQl which used the '@*' style parameters