2009-06-25 4 views
0

Das heutige Problem in meinem Code ist irgendwie seltsam, und ich konnte es noch nicht reproduzieren. Ich arbeite mit einem typisierten Dataset (erstellt mit dem Designer) und ich bin über alle Zeilen in einer Datentabelle Looping.DataSet: Enumerator und FindById nicht gleich DataRow

Manchmal (!), Wenn über den Primärschlüssel gefunden wird, ist die zurückgegebene Zeile nicht identisch mit der aus dem Enumerator. Dies ist ein Code ich das Problem zu reproduzieren schrieb:

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

Keine Zeile wird in die Konsole geschrieben werden, da FindById immer die gleiche Zeile zurückgibt, die wirklich logisch ist. In meinem Projekt-Code, mit einem ähnlichen Datensatz mit einigen String Spalten, in etwa 3% der Zeilen (! Immer die gleichen Zeilen) dies nicht der Fall, und einer der String Felder ist gerade leer:

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

Der Primärschlüssel ist das einzige Primärschlüsselfeld und daher ist FindById eine generierte Methode. Weiß jemand einen kleinen Hinweis oder hatte er schon einmal das gleiche Problem? Ich fürchte, es ist ein sehr spezieller Fall, den ich gemacht habe, der diesen Bug oder dieses Feature aktiviert. :)

Ich dachte über die Möglichkeit nach, dass dies von der Besetzung durch die Aufzählung erzeugt wird. Der Enumerator funktioniert mit dem Basistyp DataRow der generierten typisierten Zeilen. Aber ich fand nicht, etwas falsch gibt ...

Prost Matthias

Antwort

2

Was ist die Art der Sie Primärschlüssel? Das DataSet hat einen kleinen Fehler beim Vergleichen von Guids (und möglicherweise anderen Werten). Der Guid-Fehler hat nur mit bestimmten Guid-Werten zu tun und funktioniert normalerweise gut.

Anmerkung: Wenn ich einen Fehler sagen, ich meine, ich weiß, dass ein Fehlerbericht angenommen wurde, aber ich weiß nicht, ob es fix gewesen als auch

+0

Thank you! Der Typ ist string, aber tatsächlich sind GUIDs in dem Feld gespeichert. Das ist gegeben, ich kann mich nicht ändern. –

+0

Die Arbeit, die ich vorschlug, als ich den Fehler einreichte (vor ungefähr 3 Jahren, wenn ich mich nicht irre), war die Verwendung von SQL, um die GUID in eine Zeichenfolge umzuwandeln. das hat leider einen sehr realen Einfluss auf die Performance des SQL. Wenn dies nicht möglich ist, konvertieren Sie die Tabelle (zumindest für das Debugging) in ein Wörterbuch, wobei der Schlüssel des Wörterbuchs der Primärschlüssel und der Wert die Zeile ist. Soweit ich mich erinnere, war das Problem nicht mit GetHashKey verbunden –