Question

Le problème d’aujourd’hui dans mon code est assez étrange et je ne pouvais pas le reproduire pour le moment. Je travaille avec un ensemble de données typé (créé avec le concepteur) et je boucle sur toutes les lignes d'un datatable.

Parfois (!), lors de la recherche via la clé primaire, la ligne renvoyée n'est pas égale à celle de l'énumérateur. Voici un code que j'ai écrit pour reproduire le problème:

foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
    if(ds.DataTable1.FindById(dr.Id) != dr)
        Console.Write(dr.Id);
}

Aucune ligne ne sera écrite sur la console, car FindById renvoie toujours la même ligne, ce qui est vraiment logique. Dans le code de mon projet, avec un ensemble de données similaire avec quelques colonnes de chaîne, dans environ 3% des lignes (toujours les mêmes lignes!), Ce n'est pas le cas, et l'un des champs de chaîne est simplement vide:

ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason

La clé primaire est le seul champ de clé primaire et FindById est donc une méthode générée. Est-ce que quelqu'un connaît un petit indice ou a déjà rencontré le même problème auparavant? J'ai bien peur que ce soit un cas très très particulier qui permette l'activation de ce bogue. :)

J'ai pensé à la possibilité que cela soit produit par la distribution effectuée par l'énumération. L'énumérateur fonctionne avec le type de base DataRow des lignes typées générées. Mais je n'ai pas trouvé quelque chose qui n'allait pas là-bas ...

A bientôt Matthias

Était-ce utile?

La solution

Quel est le type de votre clé primaire? le DataSet a un bogue subtil pour comparer les Guids (et éventuellement d'autres valeurs). L'erreur Guid ne concerne que certaines valeurs Guid et fonctionne généralement bien.

note: quand je dis avoir un bogue, je veux dire que je sais qu'un rapport de bogue a été accepté mais je ne sais pas s'il a été corrigé aussi

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top