Pregunta

El problema de hoy en mi código es un poco extraño, y no pude reproducirlo todavía. Estoy trabajando con un conjunto de datos escrito (creado con el diseñador) y estoy recorriendo todas las filas en una tabla de datos.

A veces (!), cuando se encuentra mediante la clave primaria, la fila devuelta no es igual a la del enumerador. Este es un código que escribí para reproducir el problema:

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

No se escribirá ninguna línea en la consola, porque FindById siempre devuelve la misma fila, lo cual es realmente lógico. En el código de mi proyecto, con un conjunto de datos similar con algunas columnas de cadena, en aproximadamente el 3% de las filas (¡siempre las mismas filas!) No lo hace, y uno de los campos de cadena está vacío:

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

La clave primaria es el único campo de clave primaria y, por lo tanto, FindById es un método generado. ¿Alguien sabe alguna pista o experimentó el mismo problema antes? Me temo que es un caso muy especial que hice que habilita este error o función. :)

Pensé en la posibilidad de que esto fuera producido por el elenco realizado por la enumeración. El enumerador funciona con el tipo base DataRow de las filas escritas generadas. Pero no encontré algo mal allí ...

Saludos Matthias

¿Fue útil?

Solución

¿Cuál es el tipo de clave principal? DataSet tiene un error sutil para comparar guías (y posiblemente otros valores). El error Guid solo tiene que ver con ciertos valores Guid y generalmente funciona bien.

nota: cuando digo que tengo un error, quiero decir que sé que se ha aceptado un informe de error, pero no sé si también se ha solucionado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top