2012-03-22 3 views
0

私はそこにデータを持つデータテーブル(顧客アドレス)を持っています。場合によっては、列ADDR3には値がなく、列ADDR2には値がありません。私はADDR3の値をチェックしようとしているし、値が含まれていない場合は、ADDR2の値をADDR3にコピーしてからADDR2をブランクにしたいと考えています。私は以下のコードを使用しようとしていましたが、動作しません。私は私の 'if'文の後にブレークポイントを置いたが、プログラムは決して壊れなかった。しかし、多くの行にヌルADDR3フィールドがあることはわかっています。誰かが私が間違っていることを教えてもらえますか?データテーブルの特定の列の値をチェックできないようです。どうして?

  foreach (DataRow row in dataSet11.DataTable1.Rows) 
      { 
       object value = row["ADDR3"]; 
       if (value == DBNull.Value) 
       { 
        row["ADDR3"] = row["ADDR2"]; 
        row["ADDR2"] = " "; 
       } 
      } 
+3

あなたのif文にブレークポイント*を置き、 'value'がDBNullであるのを確認してください。 –

+0

ええ、私はそれを考えました。 ADDR3にヌル値を持つデータに到達する前に、私は数百の行を通過するだけです。しかし、それが私の唯一の手段なら、私はそれをやります。しかし、私のコードがある限り、それはうまくいくのでしょうか?それがnullではなく、 ""のような他の値である場合もありますか? – Kevin

+2

ブレークポイントを右クリックし、[フィルタ...]をクリックし、ヌル値の前の値を選択して、何百行も通過しないようにします。 – Oliver

答えて

2

それはあなたのrow["ADDR3"]値がDbNull.ValueにNEVER等しいことを可能性があります。これは、たとえば、Webサービスを介して転送されたデータテーブルの場合によく見られます(XML変換のためにnullの代わりに空の文字列があります)。

あなたのifの前にブレークポイントを置き、その値が正確にわかります。 row["ADDR3"] == nullまたはstring.IsNullOrWhiteSpace(row["ADDR3"].ToString())

+0

それはそれをしました!それは空白で、nullではありませんでした。本当にありがとう!タイマーが立ち上がるとすぐに、私は答えをマークします。再度、感謝します! – Kevin

0

値をDBNull.Valueではなくnullに比較しようとしましたか?私は、DBNull.Valueは特定のデータベースオブジェクトに対して排他的であり、一度データセット/データテーブルに読み込まれても表示されないと考えています。

+0

私はそれを試し、何が起こるか見てみましょう。ありがとう! – Kevin

0

これを試してみてください:

foreach (DataRow row in dataSet11.DataTable1.Rows) 
{ 
    if (
     row.IsNull("ADDR3") // True if the value is null 
     || 
     String.IsNullOrWhitespace(row["ADDR3"]) // True if the value is "", " ", etc. 
     ) 
    { 
     row["ADDR3"] = row["ADDR2"]; 
     row["ADDR2"] = " "; 
    } 
} 
関連する問題