Domanda

Il problema di oggi nel mio codice è piuttosto strano e non sono ancora riuscito a riprodurlo. Sto lavorando con un set di dati tipizzato (creato con il designer) e sto eseguendo il ciclo su tutte le righe in un datatable.

A volte (!), quando si trova tramite la chiave primaria, la riga restituita non è uguale a quella dell'enumeratore. Questo è un codice che ho scritto per riprodurre il problema:

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

Nessuna riga verrà scritta sulla console, perché FindById restituisce sempre la stessa riga, il che è davvero logico. Nel codice del mio progetto, con un set di dati simile con alcune colonne String, in circa il 3% delle righe (sempre le stesse righe!) Non lo fa, e uno dei campi String è semplicemente vuoto:

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

La chiave primaria è l'unico campo chiave primaria, e quindi FindById è un metodo generato. Qualcuno sa un piccolo suggerimento o ha avuto lo stesso problema prima? Temo sia un caso molto particolare che ho creato che abilita questo bug o questa funzione. :)

Ho pensato alla possibilità che questo fosse prodotto dal cast fatto dall'enumerazione. L'enumeratore funziona con il tipo di base DataRow delle righe digitate generate. Ma non ho trovato qualcosa di sbagliato lì ...

Saluti Matthias

È stato utile?

Soluzione

Qual è il tipo di chiave primaria? DataSet ha un bug sottile per confrontare le guide (e possibilmente altri valori). L'errore Guid ha a che fare solo con determinati valori Guid e di solito funziona bene.

nota: quando dico di avere un bug, intendo che so che una segnalazione di bug è stata accettata ma non so se è stato corretto anche

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top