Ошибка выполнения SQL при выполнении запроса параметра - PullRequest
0 голосов
/ 03 ноября 2018

Может кто-нибудь сказать мне, что я сделал неправильно в моем запросе параметров, поскольку он не работает?

По сути, я намерен создать результат поиска и отобразить его с помощью DataGridView.

Error 1

Error 1

Эти ошибки появляются, когда я нажимаю «Выполнить запрос» в окне построителя запросов.

Ниже приведен оператор SQL

SELECT        Products.[Product Name], Products.[Product code], [Brands For Sales].[Brand Name], [Main Group].[Group Name], Category.[Catogory Name], SubCatogory.[SubCatogory Name]
FROM            (((((Products INNER JOIN
                     Category ON Products.[Category-ID] = Category.ID) 
INNER JOIN
                     [Brands For Sales] ON Products.[Brand Name] = [Brands For Sales].ID) INNER JOIN
                     [Main Group] ON Products.[Group-ID] = [Main Group].ID AND Category.[Group-ID] = [Main Group].ID) INNER JOIN
                     Category Category_1 ON Products.[Category-ID] = Category_1.ID AND [Main Group].ID = Category_1.[Group-ID]) INNER JOIN
                     SubCatogory ON Products.[SubCategory-ID] = SubCatogory.ID AND Category.ID = SubCatogory.[Catogory-ID] AND Category_1.ID = SubCatogory.[Catogory-ID])
 WHERE        (Products.[Product Name] LIKE '%' + @Searchbox + '%')

1 Ответ

0 голосов
/ 03 ноября 2018

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

...