Je rencontre un comportement bizarre avec certaines requêtes de recherche en texte intégral, en particulier celles comportant plusieurs mots. Ils fonctionnent correctement lorsqu'ils sont exécutés via Management Studio mais ne retournent aucun résultat lorsqu'ils sont appelés à partir d'un code. J'ai fait un SQL Trace pour voir quelles commandes sont envoyées depuis mon application et exactement la même commande vient avec les résultats lorsqu'elle est exécutée à partir de Management Studio mais ne donne aucun résultat lorsqu'elle est appelée depuis mon application en utilisant la méthode ExecuteReader.Aucun résultat n'a été renvoyé à un lecteur mais la même requête fonctionne via SQL Management Studio
Cet appel:
exec dbo.FullTextSearch_Articles @ftsQuery=N' FORMSOF (INFLECTIONAL, moravec) '
renvoie les données correspondant à la fois mon application et Management Studio alors que cette commande:
exec dbo.FullTextSearch_Articles @ftsQuery=N'(FORMSOF (INFLECTIONAL, jan) AND FORMSOF (INFLECTIONAL, moravec))'
ne fera que renvoyer des données lors de l'exécution de Management Studio. J'ai copié/collé ces requêtes directement à partir d'un journal de suivi.
Sur un côté de code, j'utilise Enterprise Library, mais dans l'ensemble mon appel DB est très simple:
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;
}
Dans le second cas, dataReader.HasRows est faux pour une raison quelconque, mais encore une fois, quand ces requêtes sont exécutées à partir d'un Management Studio, les deux retournent des données. Je pensais que cela pouvait être dû à un certain nombre de lignes retournées (la deuxième requête renvoie un ensemble de résultats beaucoup plus grand), mais ensuite testé avec succès la recherche par mot unique avec encore plus de lignes retournées.
Une idée de la différence entre DataReader et une simple exécution de requête de Management Studio serait appréciée.
Merci,
Antonin
Etes-vous sûr que vous n'avez aucun faux SELECT dans le TSQL? c'est-à-dire que la première grille est celle que vous recherchez? Peut-être qu'il y a un 'SELECT' vide (débogage) quelque part? –