2013-08-06 3 views
12

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

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?

+0

Какое сообщение об ошибке? – Steve

+0

ОШИБКА [07002] [Microsoft] [драйвер ODBC Microsoft Access] Parametri недостаточно. Previsto 1. Эта ошибка говорит о том, что отсутствует один параметр. – pava91

+0

ODBC не поддерживает именованные параметры; http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx использует ординальные '?' заполнители - если у вас используется Access, есть причина для использования ODBC, а не OLEDB (что позволит им)? –

ответ

26

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

+0

это правильно! спасибо – pava91

+0

@ pava91: отметьте это как правильный ответ, затем ... – MiMo

6

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

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

OdbcCommand cmd = conn.CreateCommand(); 

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

Я провожу целый час, пытаясь понять это, спасибо, приятель !!!! –

Смежные вопросы