0

私のコードの今日の問題はちょっと奇妙で、まだ再現できませんでした。型指定されたデータセット(デザイナーで作成)を使用していて、データテーブルのすべての行をループしています。

時々(!)、主キーを介して検索するときに、返される行が列挙子からの行と等しくない場合があります。これは、問題を再現するために私が書いたコードです。

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

FindByIdは常に同じ行を返すため、コンソールには行が書き込まれません。これは実際には論理的です。私のプロジェクトのコードでは、いくつかの文字列列を持つ同様のデータセットで、行の約3%(常に同じ行!)ではそうではなく、文字列フィールドの1つは空です:

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

主キーは唯一の主キーフィールドであるため、FindByIdは生成されたメソッドです。誰かが少しヒントを知っているか、以前に同じ問題を経験したことがありますか?このバグや機能を有効にするのは、私が作成した非常に特殊なケースだと思います。:)

列挙によるキャストでこれが生まれる可能性を考えました。列挙子はDataRow、生成された型付き行の基本型を処理します。しかし、私はそこで何か問題を見つけませんでした...

乾杯マティアス

4

1 に答える 1

2

主キーの種類は何ですか?DataSetには、GUID(および場合によっては他の値)を比較するための微妙なバグがあります。Guidエラーは、特定のGuid値にのみ関係し、通常は適切に機能します。

注:バグがあると言うときは、バグレポートが受け入れられたことは知っていますが、それが修正されたかどうかもわかりません。

于 2009-06-25T10:31:41.830 に答える