我在使用一些全文搜索查询时遇到了奇怪的行为,尤其是那些包含多个单词的查询。这些在通过 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 查询执行不同,我们将不胜感激。
谢谢,
安东宁