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 提供程序忽略这些名称并使用位置。
谁能告诉我我在参数查询中做错了什么,因为它不起作用?
基本上我的目的是创建一个搜索结果并使用 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 提供程序忽略这些名称并使用位置。