有人可以告诉我我在参数查询中做错了什么吗,因为它不起作用?
基本上我的意图是创建一个搜索结果并使用DataGridView显示它。
当我在查询生成器窗口中单击“执行查询”时,出现这些错误。
下面是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 + '%')
答案 0 :(得分:0)
如果我没记错的话,即使对于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提供程序将忽略这些名称并使用位置。