J'ai une requête pour retourner des lignes distinctes aléatoires d'une base de données Access. Voici la requête:Pourquoi AccessDataSource renvoie-t-il des résultats différents à interroger dans Access?
SELECT * FROM
(SELECT DISTINCT m.MemberID, m.Title, m.FullName, m.Address,
m.Phone, m.EmailAddress, m.WebsiteAddress FROM Members AS m INNER JOIN MembersForType AS t ON m.MemberID = t.MemberID WHERE
(Category = 'MemberType1' OR Category = 'MemberType2')) as Members
ORDER BY RND(members.MemberID) DESC
Quand je lance ce dans Access, il renvoie les lignes dans un ordre différent à chaque fois, selon l'ordre de tri aléatoire. Quand je le lance dans mon application Web, les lignes reviennent dans le même ordre à chaque fois. Voici comment je l'appelle dans mon code-behind:
private void BindData()
{
using (AccessDataSource ds = new AccessDataSource("~/App_Data/mydb.mdb", GetSQLStatement()))
{
ds.DataSourceMode = SqlDataSourceMode.DataReader;
ds.CacheDuration = 0;
ds.CacheExpirationPolicy = DataSourceCacheExpiry.Absolute;
ds.EnableCaching = false;
listing.DataSource = ds.Select(new DataSourceSelectArguments());
listing.DataBind();
if (listing.Items.Count == 0)
noResults.Visible = true;
else
noResults.Visible = false;
}
}
j'ajouté dans ce genre de choses au sujet de la mise en cache parce que je pensais que la requête était mise en mémoire cache, mais le résultat a été le même. J'ai mis un point d'arrêt dans le code pour m'assurer que la requête était la même que ci-dessus et c'était le cas.
Des idées? Ça me rend dingue.
Est-il retourné avec le même ordre aléatoire ou y a-t-il une sorte d'intelligence dans la commande que vous voyez? –
Semble être le même ordre aléatoire. – Phill
Je vais mettre cela dans un commentaire, comme je suis une idée de dépannage et non une réponse, mais avez-vous essayé d'ajouter "RND (members.MemberID)" à la clause select dans la version web pour voir si elle retourne le même nombre à chaque fois? Une pensée est qu'il optimise le RND() en mettant en cache le résultat. – JohnFx