データベース

[C#] DBNullエラーを発生させずにDataRowから値を取得する

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?など)にセットする場合は
    エラーにはなりません。

関連記事

-データベース