DBNullエラーを発生させずに、DataRowから値を取得する方法です。
サンプルソース
DataRowから以下のように値を取得するとDBNullエラーが発生する可能性があります。
例)DBNullエラーが発生する可能性があるソース
1 2 |
int a = (int)dr["cd"]; bool b = (bool)dr["flag"]; |
これは、DataRowからNull値が返る可能性があるにもかかわらず、
NULL値不可のint型やbool型にセットしようとしているからです。
なので、エラーを出さないようにするにはDataRowから取得した値がNullの場合は
以下のように他の値に変換する処理を入れればOKです。
例1)DBNullエラーが発生しないソース
1 2 |
int a = DBNull.Value.Equals(dr["cd"]) ? 0 : (int)dr["cd"]; bool b = DBNull.Value.Equals(dr["flag"]) ? false : (bool)dr["flag"]; |
nullの場合は、上は0、下はfalseに置き換えています。
以下のようにも記述できます。
例2)DBNullエラーが発生しないソース
1 2 |
int a = dr.Field<int?>("cd") ?? 0; bool b = dr.Field<bool?>("flag") ?? false; |
nullの場合は、上は0、下はfalseに置き換えています。
備考
- String型はnullでも構わないためNull値判定を入れなくてもエラーにはなりません。
(Nullを空文字に置き換えたい場合は判定を入れてください。) - DataRowから取得した値をnullable型(int?やbool?など)にセットする場合はエラーにはなりません。