Я испытываю странное поведение с некоторыми полнотекстовыми поисковыми запросами, особенно с несколькими словами. Они работают нормально, когда выполняются через 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. Я копирую / вставляю эти запросы прямо из журнала трассировки.
Что касается кода, я использую Enterprise Library, но в целом мой вызов БД очень прост:
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, будет принята.
Спасибо,
Антонин