Если я правильно помню, Query Builder не поддерживает именованные параметры даже для SQL Server, не говоря уже о Access. Замените каждый из @ParameterName
заполнителей на ?
, и все будет хорошо.
EDIT:
Единственное, что изменяется при использовании позиционных параметров, а не именованных параметров (кроме того факта, что вы должны добавлять их в том же порядке, в каком они появляются в SQL, что вы должны делать в любом случае), это то, что вы не можете повторно использовать параметр , Это означает, что вам, возможно, придется передавать одно и то же значение дважды. Например, если вы использовали этот SQL с именованными параметрами:
SELECT *
FROM MyTable
WHERE Column1 = @SomeValue
OR Column2 = @SomeValue
и затем вы передали одно значение одному параметру, который будет использоваться дважды в коде SQL, вы должны изменить SQL на это с помощью позиционных параметров:
SELECT *
FROM MyTable
WHERE Column1 = ?
OR Column2 = ?
и тогда ваша команда будет иметь два параметра, и вы передадите им одинаковое значение. Это именно то, что все уже делают с Access, даже если они называют свои параметры, потому что провайдеры Jet и ACE OLE DB игнорируют эти имена и в любом случае используют позиции.