SQL 运行 参数查询时执行错误

SQL Execution error while running parameter query

谁能告诉我我在参数查询中做错了什么,因为它不起作用?

基本上我的目的是创建一个搜索结果并使用 DataGridView 显示它。

当我在查询生成器 window 上单击 'Execute Query' 时出现这些错误。

下面是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 + '%')

如果我没记错的话,Query Builder 甚至不支持 SQL Server 的命名参数,更不用说 Access 了。用 ? 替换每个 @ParameterName 占位符,你应该可以开始了。

编辑:

使用位置参数而不是命名参数时唯一改变的是(除此之外,您必须按照它们在 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 提供程序忽略这些名称并使用位置。