Rzeczywiście, ODBC ma swój udział w problemach z obsługą nazwanych parametrów. Jednak pewne użycie nazwanych parametrów jest możliwe.
Na przykład w twoim przypadku działa następująca składnia:
OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?";
cmd.Parameters.Add("USER_ID", OdbcType.VarChar, 250).Value = email;
Bardziej skomplikowana sytuacja jest, gdy nie masz unikalnego dopasowania dla parametru, takiego jak USER_ID =?; np. gdy chcesz użyć IN operator w GDZIE klauzula.
Wówczas zadanie wykonałaby następująca składnia:
OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID IN (?, ?)";
cmd.Parameters.Add("?ID1", OdbcType.VarChar, 250).Value = email1;
cmd.Parameters.Add("?ID2", OdbcType.VarChar, 250).Value = email2;
Zwróć uwagę na użycie ? (znak zapytania) zamiast @ (na znaku) w nazwie parametru. Należy jednak pamiętać, że podstawianie wartości parametrów w tym przypadku nie ma nic wspólnego z ich nazwami, a jedynie z ich kolejnością w kolekcji parametrów.
Mam nadzieję, że to pomoże :-)