【问题标题】:ms access "LIKE" operator in ms access does not work in vb.netms 访问中的 ms 访问“LIKE”运算符在 vb.net 中不起作用
【发布时间】:2021-09-08 05:23:00
【问题描述】:

我希望有人能对这种奇怪的行为有所了解。 因此,我有一个非常简单的 sql 语句:

"SELECT TOP 1 PartRefID FROM Parts WHERE PartDescription LIKE '*Backshell*' AND ParentID = 2097"

以标量方式执行。 当我在访问查询编辑器中输入它时,它可以正常工作并返回预期值。 但是,当我从一些 vb.net 代码中运行它时,它总是返回零。 谁能告诉我为什么会这样? 谢谢

【问题讨论】:

    标签: sql vb.net ms-access


    【解决方案1】:

    使用 .net 时,您必须使用 % 符号 - 它更像是 ANSI 标准,这也适用于 jet/ace(访问)数据引擎。

    因此,在编写 .net 代码而不是 VBA 时,您将使用 % 作为通配符,而不是 *。事实上,即使在 Access VBA 中,如果您要使用 ADO(而不是更常见和推荐的 DAO - 那么即使在 VBA + ADO 中,您也必须使用 % 代替 *)。

    所以事实上大多数 sql 语法都使用 %。对于 ADO,或者现在什么叫做 ado.net?然后将使用 %。

    但是,内部访问?您可以打开 ANSI 兼容性 - 但它会使现有的访问应用程序变得一团糟 - 所以我不建议这样做(启用 Access ANSI sql 兼容模式)。

    对于 Access 之外的“大多数”软件,您几乎可以假设 - 即使在访问 Access 数据库时,您也使用 % 作为通配符。唯一的例外是直接使用 DAO 作为参考库,我强烈建议您不要这样做。

    所以尝试使用 % - 一切都应该找到并且很好。

    【讨论】:

    • 太棒了,它有效!愚蠢的我认为星号意味着“通配符”。最令人困惑的是星号在查询编辑器中毫无怨言地工作。谢谢!
    • 好吧,在访问内部——是的,你仍然需要使用 *——这包括你在 VBA 中使用的内联 SQL——很容易搞砸! ;-)
    【解决方案2】:

    尝试替换*

    "SELECT TOP 1 PartRefID FROM Parts WHERE PartDescription LIKE '%Backshell%' AND ParentID = 2097"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多