【问题标题】:No results returned to a reader but the same query works thru SQL Management Studio没有结果返回给读者,但相同的查询通过 SQL Management Studio 工作
【发布时间】:2009-10-13 15:29:44
【问题描述】:

我在使用一些全文搜索查询时遇到了奇怪的行为,尤其是那些包含多个字词的查询。这些在通过 Management Studio 执行时工作正常,但在从代码调用时不返回任何结果。我进行了 SQL 跟踪以查看从我的应用程序发送了哪些命令,并且在从 Management Studio 执行时会出现完全相同的命令,但在使用 ExecuteReader 方法从我的应用程序调用时却没有结果。

这个电话:

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

将返回我的应用程序和 Management Studio 的数据,同时执行此命令:

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

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

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

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;
}

在第二种情况下,dataReader.HasRows 出于某种原因为 false,但同样,当从 Management Studio 执行这些查询时,它们都会返回一些数据。

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

如果您知道为什么 DataReader 的行为与简单的 Management Studio 查询执行不同,我们将不胜感激。

谢谢,

安东尼

【问题讨论】:

  • 您是否确定 TSQL 中没有任何虚假的SELECTs 等?即第一个网格是您要查找的网格吗?也许某处有一个空的(正在调试的)SELECT

标签: c# search full-text-search sqldatareader


【解决方案1】:

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

我想知道 reader.HasRows 是否在某种程度上依赖于客户端应用程序和服务器之间传输的数据量 - 所以对于 很多 数据的情况,一旦 ExecuteReader 方法,此属性不会立即更新被调用。

无论如何,只需删除对 reader.HasRows 的检查即可解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多