Как связать параметры через ODBC С#?

Мне нужно привязать параметры к запросу ODBC из С#. Это пример кода, но VS говорит мне, что там отсутствует один параметр.

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = @id";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();

Каков синтаксис для значений привязки для ODBC?

Ответ 1

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

Ответ 2

используйте "?" вместо @, если вы используете ODBC.

Попробуйте сделать следующее:

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();