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