параметризованный запрос не работает в VB

statement = "SELECT OrderID, (SELECT VendName FROM Vendors WHERE Vendors.VendorID = Orders.VendorID) " &
                        ",OrderDt, RcvdDt, OrderTotal " &
                        "FROM Orders " &
                        "WHERE VendName=? " &
                        "ORDER BY OrderDt DESC"

Dim cmd As New OleDbCommand(statement, connection)
cmd.Parameters.AddWithValue("VendName", txtVendorFilter.Text)
Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default)

Я пытался сделать это раньше, просто объединив значение текстового поля прямо в SQL, и я получил «Нет значений для обязательных параметров» и прочитал, что вместо этого я должен использовать параметризованные запросы. Итак, я попробовал это, и это не дает мне никаких ошибок, но в ридере ничего нет. Я никогда раньше не использовал параметризованные запросы, поэтому немного не понимаю, почему это не работает.

Изменить: я изменил приведенный выше код для учета OLEDB из того, что я кратко прочитал о том, как он должен работать, и он снова дает мне «нет значений для обязательных параметров».


person Tomcat    schedule 15.04.2012    source источник


Ответы (1)


Одна проблема здесь:

"WHERE VendName='@x' " &

Отбросьте метки ' — параметризация позаботится об этом за вас:

"WHERE VendName= @x " &

Использование ' в запросе означает, что '@x' рассматривается как строковый тип, а не как имя параметра.

Кроме того, поскольку вы используете OleDb, параметры имен не поддерживаются. Вам нужно использовать ? для обозначения параметра в запросе:

"WHERE VendName= ? " &
person Oded    schedule 15.04.2012
comment
Спасибо. Я сделал это, и теперь он снова выдает мне ошибку в читателе выполнения, говоря, что для одного или нескольких обязательных параметров не задано значение... - person Tomcat; 16.04.2012
comment
@user1335008 user1335008 - Я пропустил, что вы используете OleDb. Ответ обновлен. - person Oded; 16.04.2012