Ответ 1
Odbc не может использовать именованные параметры. Это означает, что в командной строке используются заполнители для каждого параметра, и этот заполнитель является единственным вопросительным знаком, а не именем параметра.
Затем вам нужно добавить параметры в коллекцию в том же порядке, в котором они появляются в командной строке
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 Database, и если вы хотите использовать его как имя поля или имя таблицы, тогда требуется заключить каждую ссылку в квадратные скобки. Я настоятельно рекомендую, если это возможно, изменить это имя таблицы, потому что вы будете сталкиваться с этой проблемой очень часто.