De hecho, ODBC tiene su parte de problemas con la compatibilidad con parámetros con nombre. Sin embargo, es posible cierto uso de parámetros con nombre.
Por ejemplo, en su caso funciona la siguiente sintaxis:
OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT UNIQUE_ID FROM userdetails WHERE USER_ID = ?";
cmd.Parameters.Add("USER_ID", OdbcType.VarChar, 250).Value = email;
Una situación más complicada es cuando no tiene una coincidencia única para el parámetro como USER_ID =?; por ejemplo, cuando desea utilizar IN operador en el DONDE cláusula.
Entonces la siguiente sintaxis haría el trabajo:
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;
Tenga en cuenta el uso de ? (signo de interrogación) en lugar de @ (arroba) dentro del nombre del parámetro. Aunque tenga en cuenta que la sustitución de los valores de los parámetros en este caso no tiene nada que ver con sus nombres, sino solo con su orden con la colección de parámetros.
Espero que esto ayude :-)