Odbc не могут использовать именованные параметры. Это означает, что в командной строке используются заполнители для каждого параметра, и этот заполнитель является единственным вопросительным знаком, а не именем параметра.
OdbcCommand.Parameters
Затем вам необходимо добавить параметры в коллекции в том же порядке, в котором они появляются в командной строке
OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM [user] WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();
У вас есть еще одна проблема, слово USER зарезервированное ключевое слово в базе данных MS Access и если вы хотите использовать это как имя поля или имя таблицы, тогда требуется заключить каждую ссылку с квадратными скобками. Я настоятельно рекомендую, если это возможно, изменить это имя таблицы, потому что вы будете сталкиваться с этой проблемой очень часто.
Какое сообщение об ошибке? – Steve
ОШИБКА [07002] [Microsoft] [драйвер ODBC Microsoft Access] Parametri недостаточно. Previsto 1. Эта ошибка говорит о том, что отсутствует один параметр. – pava91
ODBC не поддерживает именованные параметры; http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx использует ординальные '?' заполнители - если у вас используется Access, есть причина для использования ODBC, а не OLEDB (что позволит им)? –