【问题标题】:Debug a Subsonic Select Query调试亚音速选择查询
【发布时间】:2009-10-06 00:49:16
【问题描述】:

我有一个未返回任何值的 Subsonic 查询。我认为问题出在我的 where 子句中,虽然我不确定为什么。

我真正想要的是一种调试查询的方法,以查看 Subsonic 实际吐出的 SQL。我知道有一种方法可以使用 Inspect() 对 Query 对象执行此操作,但我正在使用 Select 对象(或者也可能使用 SQLQuerys),因为我需要连接。 Subsonic Select 是否有任何 inspect() 类型选项?

这是我正在使用的代码:

Dim qry As New [Select]("Contract_NO")
  qry.From(<table1>.Schema)
  qry.InnerJoin(<table2>.<table2columnA>, <table1>.<table1columnA)
  qry.Where(NonInfoleaseLessor.Columns.LessorCode).Like("mystring")

如果我注释掉 where 行,我会得到完整的结果列表。它不喜欢它,但我已经使用 where 子句在数据库中手动运行查询,并且它可以工作。我怎样才能看到有什么不同?

【问题讨论】:

  • 你能显示完整的查询吗?

标签: subsonic


【解决方案1】:

您的查询的问题是您应该使用 Contains("mystring") 而不是 Like("mystring")。

查看 SQL 的最佳方法是使用查询的 BuildSqlStatement() 方法。

【讨论】:

  • 感谢您对 BuildSqlStatement() 的建议,这正是我想要的,它帮助我解决了这个问题。问题不在于字符串周围缺少通配符。我在字符串中输入的正是我希望搜索过滤的内容。它最终成为我在 WHERE 子句中指定错误列的问题。
  • 很高兴为您提供帮助。如果您正在搜索一个确切的短语,您应该使用 IsEqualTo 而不是 Like 以获得更好的性能。
【解决方案2】:

使用 [a] profiler 查看实际对数据库执行的 SQL。

正如亚当发现的那样:

.Like("mystring")

应该是

.Like("%mystring%")

【讨论】:

    【解决方案3】:

    请尝试使用Like("%mystring%")

    【讨论】:

      【解决方案4】:

      这可能与您选择的子句或您使用的列名有关。 Subsonic 有几个列名字段

      OBJECT.xyzColumn

      OBJECT.xyzColumn.QualifiedName

      OBJECT.Columns.xyz

      过去我不得不使用这些来获得我想要的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多