アプリ コード変数を null 許容として定義し、null の場合は 0 に設定する理由が知りたいです。データベースからアプリ変数に null 値を渡す場合に例外を回避するだけですか? アプリケーションが null 許容の 10 進変数を絶対に必要としない場合は、読み取り時に DbNull をチェックしてください。
decimal myAppVal = rdr["DbColumn"] == DBNull.Value
? default(decimal)
: (decimal) rdr["DbColumn"];
または default(decimal) を使用する代わりに明示的に 0.0M を設定します
設計上、これを頻繁に行う場合は、データベースから値を読み取るための汎用拡張メソッドを作成することをお勧めします。このようにして、無効なキャストが回避され、例外が処理されるようにすることができますが、さらに重要なことは、null の場合にデフォルト値が返されることです。;)
次のようなものです(そして、私はここで唾を吐きます):
public static T CastFromDbTo<T>(object readerObject)
{
T returnVal = default(T);
if (readerObject is T)
{
var myValue = (T) readerObject;
returnVal = readerObject != DbNull.Value && myValue != null
? (T) readerObject
: default(T);
}
return returnVal;
}
次に、次のように値を取得できます。
var myAppValue = HelperClass.CastFromDbTo<decimal>(rdr["DbColumn"]);
または実際に拡張機能を作成します。
public static T CastFromDbTo<T>(this object readerObject)
{
T returnVal = default(T);
if (readerObject is T)
{
var myValue = (T) readerObject;
returnVal = readerObject != DbNull.Value && myValue != null
? (T) readerObject
: default(T);
}
return returnVal;
}
次に、これを行うことができます:
var myAppVal = rdr["DbColumn"].CastFromDbTo<decimal>();