【问题标题】:Error in WHERE clause near '@'. Unable to parse query text C#'@' 附近的 WHERE 子句出错。无法解析查询文本 C#
【发布时间】:2013-11-27 18:03:27
【问题描述】:

我正在尝试向我的 C# 项目中的表适配器添加一个参数。当我将 @ 添加到 where 子句时,Visual Studio 给了我一个错误。这是我的 SQL 语句:

select PO.PO_Num,
  PO.Supplier,
  PO.DateOrdered,
  PO.DateRequired,
  PO.Terms,
  PO.Freight,
  PO.FOB,
  POItems.PO_Num as Expr1,
  POItems.Quantity,
  POItems.Description,
  POItems.Item,
  POItems.Price,
  POItems.KeyNum
from PO,
  POItems
where PO.PO_Num = POItems.PO_Num
  and (PO.PO_Num = @PO_Num)

谁能告诉我我做错了什么?提前感谢您的帮助!

【问题讨论】:

  • 使用问号代替@PO_Num。你尝试了什么?您是否在网上搜索过错误消息?
  • @CodeCaster 我可以添加一个 ?而不是“at symbol”+参数来创建参数?我尝试了你在上面看到的,因为我不知道还有什么可以尝试或做什么。
  • “你尝试过什么”并不意味着“你目前有哪些代码不起作用”,而是意味着“你有什么尝试解决这个问题”,因此我问你搜索网络。 OLEDB 的参数是按顺序解析的,所以只需 ? 即可。
  • @CodeCaster 这不是您发布的问题的重复问题。因为我没有使用访问权限,而我使用的是 SQL。我也在尝试使用“at 符号”来创建一个参数,SQL 允许你这样做。

标签: c# sql visual-studio-2010 where-clause tableadapter


【解决方案1】:

要修复错误,我需要从这里更改 where 子句:

where PO.PO_Num = POItems.PO_Num and (PO.PO_Num = @PO_Num)

并添加一个问号 (?) 代替 at 符号 (@),如下所示:

where PO.PO_Num = POItems.PO_Num and (PO.PO_Num = ?)

之后我能够执行查询,并且 Visual Studio 2010 没有抛出错误。

【讨论】:

  • 这在连接到 PostgreSQL 实例的 Visual Studio 2015 中有效。
【解决方案2】:

我在添加表适配器并使用 .NET framework Data provider for oracle 的数据源时遇到了这个问题。将 where 子句更改为使用“@”和“?”的两种解决方案对我没用。

相反,我必须使用以下内容:

where PO.PO_Num = POItems.PO_Num and (PO.PO_Num = :PO_Num)

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多