Pergunta

O problema de hoje no meu código é uma espécie de estranho, e eu não poderia reproduzi-lo ainda. Eu estou trabalhando com um dataset tipado (criado com o designer) e estou looping sobre todas as linhas em uma tabela de dados.

Às vezes (!), Quando encontrar via chave primária, a linha retornada não é igual ao do recenseador. Isto é algum código que eu escrevi para reproduzir o problema:

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

Nenhuma linha será gravada no console, porque findById sempre retorna a mesma linha, o que é muito lógico. No código do meu projeto, com um conjunto de dados semelhante com algumas colunas de corda, em cerca de 3% das linhas (sempre as mesmas linhas!) Isso não acontecer, e um dos campos de corda é apenas vazio:

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

A chave primária é o único campo chave primária, e por isso findById é um método gerado. Alguém sabe uma pequena dica ou fez experimentar o mesmo problema antes? Eu tenho medo é um caso muito especial que eu fiz que permite que este bug ou recurso. :)

Eu pensei sobre a possibilidade deste ser produzidos pelo elenco feito pela enumeração. O enumerador funciona com o tipo base DataRow das linhas digitadas gerados. Mas eu não encontrar algo de errado lá ...

Felicidades Matthias

Foi útil?

Solução

O que é o tipo de você chave primária? o DataSet tem um bug sutil para comparar Guids (e possivelmente outros valores). O erro Guid só tem a ver com certos valores Guid e geralmente funciona bem.

Nota: Quando eu digo que tem um bug, eu quero dizer que eu sei que um relatório de bug foi aceite, mas eu não sei se ele foi correção bem

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top