代码之家  ›  专栏  ›  技术社区  ›  Antonin Jelinek

没有结果返回到读卡器,但相同的查询通过SQL Management Studio工作

  •  0
  • Antonin Jelinek  · 技术社区  · 15 年前

    exec dbo.FullTextSearch_Articles @ftsQuery=N' FORMSOF (INFLECTIONAL, moravec) '
    

    执行此命令时,将返回my app和Management Studio的数据:

    exec dbo.FullTextSearch_Articles @ftsQuery=N'( FORMSOF (INFLECTIONAL, jan)  AND  FORMSOF (INFLECTIONAL, moravec) )'
    

    仅在从Management Studio执行时返回数据。我直接从跟踪日志复制/粘贴这些查询。

    在代码方面,我使用的是企业库,但总的来说,我的DB调用非常简单:

    using (var dataReader = (SqlDataReader)db.ExecuteReader(cmd))
    {
       if (dataReader.HasRows)
       {
           var results = new List<IFullTextSearchItem>();
           while (dataReader.Read())
           {
              results.Add(CreateArticleSearchFromReader(dataReader));
           }
           return results;
        }
        return null;
    }
    

    我认为这可能是由于返回了许多行(第二个查询返回的结果集要大得多),但随后成功地测试了返回更多行的单词搜索。

    谢谢,

    安东宁

    1 回复  |  直到 13 年前
        1
  •  1
  •   Antonin Jelinek    15 年前

    好吧,这很有趣。我做了更多的调试,发现dataReader.HasRows文件属性不准确-由于某些原因,在某些情况下,即使结果视图集合中有数据,也会将其设置为false。

    我想知道阅读器.HasRows在某种程度上依赖于在客户端应用程序和服务器之间传输的数据量—在 许多 对于数据,调用ExecuteReader方法后不会立即更新此属性。

    不管怎样,只要删除阅读器.HasRows解决了这个问题。