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

时间:2018-11-03 10:16:53

标签: vb.net visual-studio query-builder

有人可以告诉我我在参数查询中做错了什么吗,因为它不起作用?

基本上我的意图是创建一个搜索结果并使用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 :(得分: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提供程序将忽略这些名称并使用位置。